ভিউক্যাপচার হল একটি সফটওয়্যার টুল যা সংযুক্ত উইন্ডোর সাথে সংযুক্ত ভিউগুলির বৈশিষ্ট্য (যেমন অবস্থান, আকার, স্কেল এবং দৃশ্যমানতা) ক্যাপচার করে। ভিউক্যাপচার একটি উইন্ডোর মধ্যে বিভিন্ন ভিউ এবং তাদের বৈশিষ্ট্য সম্পর্কে তথ্য ক্যাপচার করে, যা আপনাকে নির্দিষ্ট সময়ে ব্যবহারকারীর অভিজ্ঞতার অবস্থা জানাতে এবং সময়ের সাথে সাথে পরিবর্তনগুলি ট্র্যাক করতে দেয়।
স্ক্রিন রেকর্ডিং একটি নির্দিষ্ট সময়ে একটি ভিউয়ের অবস্থা কল্পনা করতে পারে এবং এটি কীভাবে পরিবর্তিত হয় তা দেখাতে পারে, তবে এর জন্য উল্লেখযোগ্য CPU রিসোর্স প্রয়োজন এবং কর্মক্ষমতা প্রভাবিত করতে পারে। ViewCapture টুলটিতে রিসোর্স প্রভাব কম এবং এটি আরও ঘন ঘন সক্রিয় করা যেতে পারে। অতিরিক্তভাবে, ViewCapture ভিউ লেভেলে ফ্রেম অনুসারে ভিজ্যুয়ালাইজেশন প্রদর্শন করে, যা স্ক্রিন রেকর্ডিংয়ের তুলনায় নির্দিষ্ট মুহুর্তে ভিউ স্টেট পরিদর্শন করা আরও সহজ করে তোলে।
এই পৃষ্ঠাটি সিস্টেম অ্যাপগুলিতে ভিউক্যাপচার কীভাবে অনবোর্ড করবেন তা বর্ণনা করে।
ব্যবহার করুন
 ViewCapture.java onDrawListener এর একটি ইনস্ট্যান্স প্রয়োগ করে এবং অঙ্কন প্রক্রিয়ার সময় একটি ViewCapture ট্রেস সংগ্রহ করে। প্রতিটি ফ্রেম রিড্র উইন্ডোর রুট ভিউ থেকে শুরু করে ভিউ ট্রি হায়ারার্কির একটি ট্র্যাভার্সাল ট্রিগার করে। উন্নত কর্মক্ষমতা অর্জনের জন্য ViewCapture একটি ব্যাকগ্রাউন্ড থ্রেডে মান আনতে এবং অনুলিপি করতে পাবলিক View.java গেটার পদ্ধতি ব্যবহার করে। ViewCapture বাস্তবায়ন captureViewTree ব্যবহার করে একটি ভিউ নোংরা বা অবৈধ কিনা তা পরীক্ষা করে এই প্রক্রিয়াটিকে অপ্টিমাইজ করে, ফলে পুরো ভিউ হায়ারার্কির ট্র্যাভার্সাল এড়ানো যায়। captureViewTree শুধুমাত্র সিস্টেম অ্যাপের জন্য উপলব্ধ এবং এটি UnsupportedAppUsage API এর অংশ। এই API এর ব্যবহার তাদের লক্ষ্য SDK সংস্করণের উপর ভিত্তি করে অ্যাপগুলিতে সীমাবদ্ধ।
সীমাবদ্ধতা
এই বিভাগটি ViewCapture এর কর্মক্ষমতা এবং মেমরির সীমাবদ্ধতা বর্ণনা করে।
কর্মক্ষমতা
 ViewCapture পারফরম্যান্সের জন্য গড় প্রধান থ্রেড ওভারহেড হল 195 μs। তবে, সবচেয়ে খারাপ পরিস্থিতিতে, এটি প্রায় 5 ms সময় নিতে পারে। Perfetto ট্রেসে vc#onDraw স্লাইসটি দেখুন।
ওভারহেড খরচ মূলত নিম্নলিখিত ক্রিয়াগুলির কারণে হয়:
- শ্রেণীবিন্যাস অতিক্রম করতে ৫০ μs খরচ হয়, এমনকি ছাঁটাই করার পরেও।
- ফ্রিলিস্ট অ্যালোকেটর থেকে বস্তু টেনে ভিউ প্রোপার্টিজের কপি সংরক্ষণ করতে ২০ μs খরচ হয়।
- একটি গেটার ফাংশনের মাধ্যমে প্রতিটি সম্পত্তির মান আনার ফলে প্রতি ভিউতে অনেক অতিরিক্ত ফাংশন কল আসে, যার খরচ হয় ১১০ μs।
অতএব, সর্বদা অন-ট্রেসিং (AOT) তে ViewCapture সক্ষম করলে সিস্টেমের কর্মক্ষমতা নেতিবাচকভাবে প্রভাবিত হয় এবং জ্যাঙ্কের দিকে পরিচালিত করে। এই কর্মক্ষমতা এবং মেমোরি সীমাবদ্ধতার কারণে, এই পদ্ধতিটি AOT-এর জন্য প্রস্তুত নয়। আমরা শুধুমাত্র ল্যাব এবং স্থানীয় ডিবাগিংয়ের জন্য ViewCapture সুপারিশ করি।
স্মৃতি
ViewCapture ট্রেসের জন্য Perfetto-এর পদ্ধতিতে অতিরিক্ত মেমরি ব্যবহার রোধ করার জন্য একটি পূর্বনির্ধারিত মেমরি ফুটপ্রিন্ট সহ একটি একক রিং বাফার ব্যবহার করা হয়। এই পদ্ধতিটি প্রতিটি উইন্ডোর জন্য পৃথক রিং বাফার এড়িয়ে অতিরিক্ত মেমরি খরচ রোধ করে। তবে, এটি প্রতিটি ফ্রেমের জন্য Perfetto-তে প্রতিটি অবস্থার জন্য সম্পূর্ণ ভিউ হায়ারার্কি সংরক্ষণের সমস্যার সমাধান করে না। NexusLauncher-এর মতো একটি একক উইন্ডো রেকর্ডিং, 10 MB বাফারে 30 সেকেন্ডেরও বেশি ViewCapture ডেটা তৈরি করতে পারে। সিস্টেম UI থেকে 30 টিরও বেশি উইন্ডো ক্যাপচার করার জন্য হয় একটি বড় বাফার প্রয়োজন হয় অথবা যথেষ্ট কম রেকর্ডিং সময় প্রয়োজন হয়।
নির্দেশনা
সিস্টেম অ্যাপগুলিতে ViewCapture অনবোর্ড করতে, এই নির্দেশাবলী অনুসরণ করুন:
- লঞ্চার কোডে দেখানো হিসাবে, আপনার - Android.bpফাইলে নির্ভরতা যোগ করুন।- android_library { name: "YourLib", static_libs: [ ... "//frameworks/libs/systemui:view_capture", ... ], platform_apis: true, privileged: true, }
- আপনার উইন্ডো তৈরি করার সময় একটি ViewCapture ইনস্ট্যান্স তৈরি করুন, উদাহরণস্বরূপ: - উদাহরণ ১ : - private SafeCloseable mViewCapture; @Override protected void onCreate(Bundle savedInstanceState) { ... mViewCapture = ViewCaptureFactory.getInstance(this).startCapture(getWindow()); }
- উদাহরণ ২ : - private SafeCloseable mViewCapture; @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (enableViewCaptureTracing()) { mViewCaptureCloseable = ViewCaptureFactory.getInstance(getContext()) .startCapture(getRootView(), ".NotificationShadeWindowView"); } ... }
 
- আপনার উইন্ডোটি ধ্বংস করার সময় ViewCapture ইনস্ট্যান্সটি বন্ধ করুন, যেমনটি নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে: 
