টাস্ক স্ন্যাপশট

টাস্ক স্ন্যাপশট হল Android 8.0-এ চালু করা অবকাঠামো যা সাম্প্রতিক থাম্বনেইলের স্ক্রিনশট এবং উইন্ডো ম্যানেজার থেকে সংরক্ষিত সারফেসগুলিকে একত্রিত করে। সাম্প্রতিক থাম্বনেইল সাম্প্রতিক ভিউতে একটি টাস্কের শেষ অবস্থার প্রতিনিধিত্ব করে।

যখন একটি ক্রিয়াকলাপ একটি স্থগিত অবস্থায় চলে যায়, উইন্ডো ম্যানেজার ততক্ষণ কার্যকলাপের পৃষ্ঠগুলিকে ধ্বংস করে না যতক্ষণ না সেই কার্যকলাপটি টাস্কের শীর্ষে ছিল। যদি এই ক্রিয়াকলাপটি আবার দেখাতে হয়, উইন্ডো ম্যানেজার অ্যানিমেশনটি শুরু করতে সক্ষম হয়েছিল ক্রিয়াকলাপটির প্রথম ফ্রেম আঁকা শেষ হওয়ার জন্য অপেক্ষা না করে, কারণ এটি এই সংরক্ষিত সারফেসটি ব্যবহার করতে সক্ষম হয়েছিল।

স্থাপত্য

সাম্প্রতিক থাম্বনেইল এবং সংরক্ষিত সারফেসের দুটি ধারণা টাস্ক স্ন্যাপশটের সাথে একীভূত। যখন একটি টাস্ক ব্যাকগ্রাউন্ডে যায়, উইন্ডো ম্যানেজার এই টাস্কের একটি স্ক্রিনশট একটি GraphicBuffer এ রাখে। যতক্ষণ পর্যন্ত টাস্কের শীর্ষ ক্রিয়াকলাপের প্রয়োগ মেমরিতে থাকে, ততক্ষণ এই গ্রাফিকবাফারটি মেমরিতে বজায় থাকবে। এখন, একই অ্যাক্টিভিটি আবার সামনে আনা হলে, উইন্ডো ম্যানেজার একটি স্টার্টিং উইন্ডো তৈরি করবে (টাস্কস্ন্যাপশট সারফেস), এবং শুরুর উইন্ডোর বাফার সারিতে কোনো মেমরি কপি না করে গ্রাফিকবাফার সংযুক্ত করবে। ক্রিয়াকলাপটি তার প্রথম ফ্রেম আঁকার সাথে সাথে, টাস্ক স্ন্যাপশট শুরুর উইন্ডোটি নিয়মিত স্প্ল্যাশ স্ক্রিনের মতো মসৃণভাবে বিবর্ণ হয়ে যাবে।

একই GraphicBuffer-কে বাইন্ডারের মাধ্যমে SystemUI-তে পাঠানো হয় যাতে Recents view-এ একটি টাস্কের পূর্বরূপ অবস্থা আঁকতে ব্যবহার করা হয়। যেহেতু এটি একটি বাফারের একটি রেফারেন্স, তাই এটিকে বাইন্ডারের মাধ্যমে পাঠানোর জন্য কিছু সংস্থান ব্যয় হয়। যখন গ্রাফিকবাফার সিস্টেমইউআই-এ আসে, তখন এটি একটি হার্ডওয়্যার বিটম্যাপে মোড়ানো হয় এবং তারপরে গ্রাফিক্স মেমরিতে কোনও মেমরি আপলোড না করেই স্ক্রিনে আঁকা হয়।

সুবিধা

এই নতুন স্থাপত্যের তিনটি প্রধান সুবিধা রয়েছে:

  • যদি টাস্ক স্ন্যাপশট একটি প্রারম্ভিক উইন্ডো হিসাবে ব্যবহার করা হয়, স্ন্যাপশট এবং বাস্তব বিষয়বস্তুর মধ্যে একটি চমৎকার ক্রসফেড আছে।
  • সিস্টেমইউআই-তে টাস্ক স্ন্যাপশট আঁকা হলে, এটি কোনও অনুলিপি ছাড়াই করা যেতে পারে। পূর্বে বিটম্যাপকে Ashmem-এ কপি করতে হতো, তারপর গ্রাফিক্স মেমরিতে। যেহেতু এই পদ্ধতিটি সরাসরি গ্রাফিক্স মেমরিতে স্ন্যাপশট সংরক্ষণ করে, তাই কোন অনুলিপি করার প্রয়োজন নেই।
  • আপনি সাম্প্রতিকগুলিতে যে রাজ্যটি দেখছেন তা সর্বদা সেই রাজ্যের সাথে মেলে যা আপনি অ্যাপটি পুনরায় খোলার সময় প্রথম দেখতে পাবেন৷ এখানে একই বাফার থাকার ফলে অনেক মেমরি সঞ্চয় হয়। এই কারণেই সাম্প্রতিকগুলি এখন এই ছবিগুলিকে সম্পূর্ণ রেজোলিউশনে দেখাতে সক্ষম৷ পূর্বে, এটি মেমরি সংরক্ষণের জন্য 64% দ্বারা স্যাম্পল করা হয়েছিল।

বাস্তবায়ন

এই বৈশিষ্ট্যটি সম্পূর্ণরূপে অ্যান্ড্রয়েড প্ল্যাটফর্মে বিদ্যমান। কোন ইন্টিগ্রেশন প্রয়োজন, এবং কাস্টমাইজেশন সমর্থিত নয়. ডিভাইস নির্মাতারা, তবে, টাস্ক স্ন্যাপশট বৈশিষ্ট্য সম্পূর্ণরূপে অক্ষম করতে পারে।

এই বৈশিষ্ট্যটি নিষ্ক্রিয় করতে, এই ফাংশনটি সংশোধন করুন:

frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215

উল্লেখ্য যে বৈশিষ্ট্যটি অক্ষম করা থাকলে, সাম্প্রতিক দৃশ্য কোন থাম্বনেইল দেখাবে না।

উচ্চ-রেজোলিউশন এবং কম-রেজোলের স্ন্যাপশট

টাস্ক স্ন্যাপশট দুটি স্কেলে ডিস্কে লেখা হয়। ডিস্ক থেকে একটি টাস্ক স্ন্যাপশট পুনরুদ্ধার করার সময়, কম-রেজোলিউশন স্ন্যাপশটগুলি প্রথমে পড়া হয়, এবং তারপরে তাদের উচ্চ-রেজোলিউশন প্রতিস্থাপিত হয়। এই অপ্টিমাইজেশান ইমেজ লোড সময় উন্নত. অন্যথায়, ডিস্ক থেকে স্ন্যাপশট ফাইলটি পড়ার সময় সামান্য বিলম্ব হতে পারে, এবং চিত্রটি উপলব্ধ না হওয়া পর্যন্ত ব্যবহারকারী একটি ফাঁকা টাস্ক কার্ড দেখতে পাবে। আপনি config_highResTaskSnapshotScale এবং config_lowResTaskSnapshotScale সেট করে ডিভাইস ওভারলে কনফিগারেশন ফাইল overlay/frameworks/base/core/res/res/values/config.xml স্কেলগুলি কনফিগার করতে পারেন। ডিফল্টরূপে, এগুলি যথাক্রমে 1.0 এবং 0.5 এ সেট করা আছে। config_lowResTaskSnapshotScale কে 0.0-এ সেট করে কম-রেজোর স্ন্যাপশটগুলি অক্ষম করুন।

উদাহরণ এবং উৎস

TaskSnapshot* ফাইলগুলির মধ্যে এই বৈশিষ্ট্যটির জন্য বাকি কোডটি এখানে খুঁজুন:

frameworks/base/+/main/services/core/java/com/android/server/wm/