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