বাফারকিউ এবং গ্রেলোক

বাফেরকিউ ক্লাসটি এমন উপাদানগুলির সাথে সংযোগ স্থাপন করে যা গ্রাফিকাল ডেটা ( প্রযোজক ) তৈরি করে এমন উপাদানগুলির সাথে যা প্রদর্শন বা আরও প্রক্রিয়াকরণের জন্য ( গ্রাহকগণ ) ডেটা গ্রহণ করে to সিস্টেমের মাধ্যমে গ্রাফিকাল ডেটার বাফারগুলিকে সরানো প্রায় সমস্ত কিছুই বাফারকিউতে নির্ভর করে।

গ্রেলোক মেমরি বরাদ্দকারী বাফার বরাদ্দগুলি সম্পাদন করে এবং দুটি বিক্রেতা-নির্দিষ্ট এইচআইডিএল ইন্টারফেসের মাধ্যমে প্রয়োগ করা হয় ( hardware/interfaces/graphics/allocator/ এবং hardware/interfaces/graphics/mapper/ )। allocate() ফাংশনটি প্রত্যাশিত যুক্তি (প্রস্থ, উচ্চতা, পিক্সেল ফর্ম্যাট) পাশাপাশি ব্যবহারের পতাকাগুলির একটি সেট নেয় set

বাফারকিউ উত্পাদক এবং গ্রাহকরা

গ্রাহকরা বাফারকিউ ডেটা স্ট্রাকচার তৈরি এবং মালিকানাধীন এবং তাদের প্রযোজকদের তুলনায় বিভিন্ন প্রক্রিয়াতে থাকতে পারে। যখন কোনও প্রযোজকের বাফারের প্রয়োজন হয়, তখন এটি বাফারকুইয়ের কাছ থেকে ডেকিউ dequeueBuffer() কল করে বাফারগুলির প্রস্থ, উচ্চতা, পিক্সেল ফর্ম্যাট এবং ব্যবহারের পতাকাগুলি নির্দিষ্ট করে একটি বিনামূল্যে বাফারের অনুরোধ করে। প্রযোজক তারপরে বাফারকে queueBuffer() করে এবং বাফারকে queueBuffer() কল করে queueBuffer() । এরপরে, গ্রাহক acquireBuffer() সাথে অর্জন করে এবং বাফার সামগ্রীগুলি ব্যবহার করে। গ্রাহক হয়ে গেলে, এটি releaseBuffer() কল করে releaseBuffer() কাতারে ফিরিয়ে দেয়। সিঙ্ক ফ্রেমওয়ার্কটি কীভাবে বাফারগুলি অ্যান্ড্রয়েড গ্রাফিক্স পাইপলাইনের মধ্য দিয়ে যায় controls

বাফারকিউয়ের কিছু বৈশিষ্ট্য যেমন সর্বোচ্চ পরিমাণে বাফার ধরে রাখতে পারে তা নির্মাতা এবং ভোক্তা সম্মিলিতভাবে নির্ধারণ করেন। যাইহোক, বাফারকিউ বাফারগুলির প্রয়োজন হিসাবে তাদের বরাদ্দ করে। বৈশিষ্ট্যগুলি পরিবর্তিত না হলে বাফারগুলি ধরে রাখা হয়; উদাহরণস্বরূপ, যদি কোনও প্রযোজক আলাদা আকারের বাফারগুলির জন্য অনুরোধ করেন তবে পুরানো বাফারগুলি মুক্তি দেওয়া হয় এবং চাহিদা অনুসারে নতুন বাফারগুলি বরাদ্দ করা হয়।

বাফার সামগ্রীগুলি কখনই বাফেরকিউ দ্বারা অনুলিপি করা হয় না, কারণ প্রচুর পরিমাণে ডেটা স্থানান্তর করা অকার্যকর। পরিবর্তে, বাফার সর্বদা একটি হ্যান্ডেল দ্বারা পাস করা হয়।

সিনস্ট্রাসের সাহায্যে বাফারকিউ ট্র্যাকিং

গ্রাফিক্স বাফারগুলি কীভাবে চলাফেরা করে তা বোঝার জন্য Systrace ব্যবহার করুন , এটি একটি অল্প সময়ের মধ্যে ডিভাইসের ক্রিয়াকলাপ রেকর্ড করে। সিস্টেম-স্তরের গ্রাফিক্স কোডটি প্রযোজ্য অ্যাপ্লিকেশন কাঠামোর কোডের মতোই ভালভাবে চালিত।

Systrace ব্যবহার করার জন্য, সক্ষম gfx , view , এবং sched ট্যাগ। বাফেরকিউ আইটেমগুলি ট্রেসটিতে প্রদর্শিত হয়। উদাহরণস্বরূপ, গ্রাফিকের প্লে ভিডিও (সারফেসভিউ) চলার সময় আপনি যদি কোনও সন্ধান পান তবে সারফেসভিউ লেবেলযুক্ত সারিটি আপনাকে জানায় যে কোনও নির্দিষ্ট সময়ে কতগুলি বাফার সারি রেখেছে

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

আপনি যদি গ্রাফিকের প্লে ভিডিওতে (টেক্সচারভিউ) স্যুইচ করেন এবং কোনও নতুন ট্রেস ধরেন তবে আপনি com.android.grafika / com.android.grafika.PlayMovieActivity নামক একটি সারি দেখেন। এটি মূল ইউআই স্তর, যা অন্য একটি বাফারকিউ। টেক্সচারভিউ পৃথক স্তরের পরিবর্তে ইউআই স্তরে রেন্ডার করে, তাই ভিডিও-চালিত আপডেটগুলি এখানে প্রদর্শিত হয়।

গ্রেলোক

গ্রেলোক বরাদ্দকারী এইচএল hardware/libhardware/include/hardware/gralloc.h । ব্যবহারের পতাকাগুলির মাধ্যমে বাফার বরাদ্দ সম্পাদন করে। ব্যবহারের পতাকাগুলিতে বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে:

  • সফ্টওয়্যার (সিপিইউ) থেকে কত বার মেমরি অ্যাক্সেস করা হবে
  • হার্ডওয়্যার (জিপিইউ) থেকে কত বার মেমরি অ্যাক্সেস করা হবে
  • মেমোরিটি ওপেনজিএল ইএস (জিএলইএস) টেক্সচার হিসাবে ব্যবহৃত হবে কিনা
  • মেমোরিটি কোনও ভিডিও এনকোডার দ্বারা ব্যবহৃত হবে কিনা

উদাহরণস্বরূপ, যদি কোনও প্রযোজকের বাফার ফর্ম্যাটটি RGBA_8888 পিক্সেল নির্দিষ্ট করে এবং নির্মাতা সূচিত করে যে বাফারটি সফ্টওয়্যার থেকে অ্যাক্সেস করা হবে (যার অর্থ একটি অ্যাপ্লিকেশন সিপিইউতে পিক্সেল স্পর্শ করবে), গ্রেলোক আরজিবিএ ক্রমে প্রতি পিক্সেল 4 বাইট সহ একটি বাফার তৈরি করে। পরিবর্তে, যদি কোনও উত্পাদক নির্দিষ্ট করে দেয় যে তার বাফারটি কেবল হার্ডওয়্যার থেকে অ্যাক্সেস করা হবে এবং জিএলইএস টেক্সচার হিসাবে, গ্রেলোক GLES ড্রাইভার যা কিছু করতে পারে যেমন বিজিআরএ অর্ডারিং, ননলাইনারের সুইজল্ড লেআউট এবং বিকল্প রঙ বিন্যাস। হার্ডওয়্যারটিকে তার পছন্দসই বিন্যাসটি ব্যবহার করতে দেওয়া পারফরম্যান্সকে উন্নত করতে পারে।

কিছু মান নির্দিষ্ট প্ল্যাটফর্মে একত্রিত করা যায় না। উদাহরণস্বরূপ, ভিডিও এনকোডার পতাকাটির জন্য YUV পিক্সেলের প্রয়োজন হতে পারে, সুতরাং সফ্টওয়্যার অ্যাক্সেস যুক্ত করে RGBA_8888 উল্লেখ ব্যর্থ হয়।

গ্রেলোক ফিরিয়ে দেওয়া হ্যান্ডেলটি বাইন্ডারের মাধ্যমে প্রক্রিয়াগুলির মধ্যে দিয়ে যেতে পারে।

সুরক্ষিত বাফার

গ্র্যালোক ব্যবহারের পতাকা GRALLOC_USAGE_PROTECTED গ্রাফিক্স বাফারটি কেবল একটি হার্ডওয়্যার-সুরক্ষিত পাথের মাধ্যমে প্রদর্শিত হতে দেয়। এই ওভারলে প্লেনগুলি ডিআরএম সামগ্রী প্রদর্শন করার একমাত্র উপায় (ডিআরএম-সুরক্ষিত বাফারগুলি সারফেসফ্লিংগার বা ওপেনগিএল ড্রাইভার দ্বারা অ্যাক্সেস করা যাবে না)।

ডিআরএম-সুরক্ষিত ভিডিও কেবল একটি ওভারলে প্লেনে উপস্থাপন করা যেতে পারে। সুরক্ষিত সামগ্রী সমর্থন করে এমন ভিডিও প্লেয়ারগুলি অবশ্যই সারফেসভিউয়ের সাথে প্রয়োগ করতে হবে। সুরক্ষিত হার্ডওয়্যারে চলমান সফ্টওয়্যার বাফারটি পড়তে বা লিখতে পারে না; হার্ডওয়্যার সুরক্ষিত পাথ অবশ্যই হার্ডওয়ার রচয়িতা ওভারলেতে উপস্থিত হওয়া উচিত (এটি হ'ল হার্ডওয়্যার সুরকার ওপেনগেল ইএস রচনাতে স্যুইচ করলে সুরক্ষিত ভিডিওগুলি প্রদর্শন থেকে অদৃশ্য হয়ে যায়)।

সুরক্ষিত সামগ্রীর বিশদগুলির জন্য, ডিআরএম দেখুন