ফায়ারবেস পারফরম্যান্স মনিটরিংয়ের মাধ্যমে লোডের সময় এবং স্ক্রিন রেন্ডারিং পরিমাপ করুন

1. ভূমিকা

শেষ আপডেট: 2021-03-11

কেন আমরা ভিউ এর কর্মক্ষমতা পরিমাপ করতে হবে?

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

ফায়ারবেস পারফরম্যান্স মনিটরিং কি এই পারফরম্যান্স মেট্রিকগুলিকে বাক্সের বাইরে সরবরাহ করে না?

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

আপনি কি শিখবেন

  • কীভাবে একটি অ্যান্ড্রয়েড অ্যাপে ফায়ারবেস পারফরম্যান্স মনিটরিং যুক্ত করবেন
  • একটি কার্যকলাপ বা একটি খণ্ডের লোডিং বোঝা
  • একটি অ্যাক্টিভিটি বা ফ্র্যাগমেন্টের লোড টাইম পরিমাপ করার জন্য কাস্টম কোড ট্রেস কীভাবে যন্ত্র তৈরি করবেন
  • স্ক্রীন রেন্ডারিং বোঝা এবং একটি ধীর/হিমায়িত ফ্রেম কি
  • স্লো/ফ্রোজেন স্ক্রিন রেকর্ড করার জন্য মেট্রিক্সের সাথে কাস্টম কোড ট্রেসগুলিকে কীভাবে ইনস্ট্রুমেন্ট করা যায়
  • কিভাবে Firebase কনসোলে সংগৃহীত মেট্রিক্স দেখতে হয়

আপনি কি প্রয়োজন হবে

  • অ্যান্ড্রয়েড স্টুডিও 4.0 বা উচ্চতর
  • একটি অ্যান্ড্রয়েড ডিভাইস/এমুলেটর
  • জাভা সংস্করণ 8 বা উচ্চতর

2. সেট আপ করা হচ্ছে

কোড পান

এই কোডল্যাবের নমুনা কোড ক্লোন করতে নিম্নলিখিত কমান্ডগুলি চালান। এটি আপনার মেশিনে codelab-measure-android-view-performance নামে একটি ফোল্ডার তৈরি করবে:

$ git clone https://github.com/FirebaseExtended/codelab-measure-android-view-performance.git
$ cd codelab-measure-android-view-performance

আপনার মেশিনে গিট না থাকলে, আপনি সরাসরি GitHub থেকে কোডটি ডাউনলোড করতে পারেন।

অ্যান্ড্রয়েড স্টুডিওতে measure-view-performance-start প্রকল্পটি আমদানি করুন। আপনি সম্ভবত কিছু সংকলন ত্রুটি বা একটি অনুপস্থিত google-services.json ফাইল সম্পর্কে একটি সতর্কতা দেখতে পাবেন। আমরা এই ধাপের পরবর্তী বিভাগে এটি সংশোধন করব।

এই কোডল্যাবে, আমরা ফায়ারবেস অ্যাসিস্ট্যান্ট প্লাগইন ব্যবহার করে আমাদের অ্যান্ড্রয়েড অ্যাপকে একটি Firebase প্রোজেক্টের সাথে নিবন্ধন করব এবং প্রয়োজনীয় Firebase কনফিগারেশন ফাইল, প্লাগইন এবং নির্ভরতাগুলি আমাদের Android প্রোজেক্টে যোগ করব — সবই Android স্টুডিও থেকে !

আপনার অ্যাপটিকে Firebase-এ সংযুক্ত করুন

  1. অ্যান্ড্রয়েড স্টুডিও / সাহায্যে যান > আপনি Android স্টুডিও এবং ফায়ারবেস সহকারীর সর্বশেষ সংস্করণ ব্যবহার করছেন কিনা তা নিশ্চিত করতে আপডেটগুলি পরীক্ষা করুন
  2. সহায়ক ফলকটি খুলতে সরঞ্জাম > ফায়ারবেস নির্বাচন করুন।

e791bed0999db1e0.png

  1. আপনার অ্যাপে যোগ করতে পারফরম্যান্স মনিটরিং বেছে নিন, তারপরে পারফরম্যান্স মনিটরিং দিয়ে শুরু করুন ক্লিক করুন।
  2. Firebase এর সাথে আপনার অ্যান্ড্রয়েড প্রজেক্ট সংযোগ করতে Firebase-এর সাথে Connect-এ ক্লিক করুন (এটি আপনার ব্রাউজারে Firebase কনসোল খুলবে)
  3. Firebase কনসোলে, প্রকল্প যোগ করুন ক্লিক করুন, তারপর একটি Firebase প্রকল্পের নাম লিখুন (যদি আপনার ইতিমধ্যেই একটি Firebase প্রকল্প থাকে, তাহলে আপনি পরিবর্তে সেই বিদ্যমান প্রকল্পটি নির্বাচন করতে পারেন) । Firebase প্রকল্প এবং একটি নতুন Firebase অ্যাপ তৈরি করতে Continue-এ ক্লিক করুন এবং শর্তাবলী স্বীকার করুন।
  4. আপনার নতুন ফায়ারবেস অ্যাপটিকে আপনার অ্যান্ড্রয়েড স্টুডিও প্রকল্পের সাথে সংযুক্ত করার জন্য আপনাকে পরবর্তীতে একটি ডায়ালগ দেখতে হবে।

42c498d28ead2b77.png

  1. অ্যান্ড্রয়েড স্টুডিওতে ফিরে এসে, অ্যাসিস্ট্যান্ট প্যানে, আপনার অ্যাপটি Firebase-এর সাথে সংযুক্ত আছে কিনা তা নিশ্চিতকরণ দেখতে হবে।

dda8bdd9488167a0.png

আপনার অ্যাপে পারফরম্যান্স মনিটরিং যোগ করুন

অ্যান্ড্রয়েড স্টুডিওতে অ্যাসিস্ট্যান্ট প্যানে, আপনার অ্যাপে পারফরম্যান্স মনিটরিং যোগ করুন- এ ক্লিক করুন।

আপনি পরিবর্তনগুলি স্বীকার করার জন্য একটি ডায়ালগ দেখতে পাবেন যার পরে সমস্ত প্রয়োজনীয় নির্ভরতা যোগ করা হয়েছে তা নিশ্চিত করতে অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ সিঙ্ক করবে।

9b58145acc4be030.png

অবশেষে, আপনি Android স্টুডিওতে সহকারী ফলকে সাফল্যের বার্তাটি দেখতে পাবেন যে সমস্ত নির্ভরতা সঠিকভাবে সেট আপ করা হয়েছে।

aa0d46fc944e0c0b.png

একটি অতিরিক্ত পদক্ষেপ হিসাবে, "(ঐচ্ছিক) ডিবাগ লগিং সক্ষম করুন" ধাপে নির্দেশাবলী অনুসরণ করে ডিবাগ লগিং সক্ষম করুন৷ একই নির্দেশাবলী পাবলিক ডকুমেন্টেশনেও পাওয়া যায়।

3. অ্যাপটি চালান

আপনি যদি পারফরম্যান্স মনিটরিং SDK-এর সাথে আপনার অ্যাপ সফলভাবে সংহত করে থাকেন, তাহলে প্রকল্পটি এখন কম্পাইল করা উচিত। অ্যান্ড্রয়েড স্টুডিওতে, আপনার সংযুক্ত অ্যান্ড্রয়েড ডিভাইস/এমুলেটরে অ্যাপটি তৈরি করতে এবং চালাতে রান > রান 'অ্যাপ' এ ক্লিক করুন।

অ্যাপটিতে দুটি বোতাম রয়েছে যা আপনাকে একটি সংশ্লিষ্ট কার্যকলাপ এবং খণ্ডে নিয়ে যায়, যেমন:

410d8686b4f45c33.png

এই কোডল্যাবের নিম্নলিখিত ধাপে, আপনি শিখবেন কীভাবে আপনার কার্যকলাপ বা খণ্ডের লোড সময় এবং স্ক্রীন রেন্ডারিং কার্যক্ষমতা পরিমাপ করবেন।

4. একটি কার্যকলাপ বা খণ্ডের লোডিং বোঝা

এই ধাপে, আমরা শিখব যে একটি কার্যকলাপ বা ফ্র্যাগমেন্ট লোড করার সময় সিস্টেমটি কী করছে।

একটি কার্যকলাপের লোডিং বোঝা

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

একটি উচ্চ স্তরে, যখন আপনার অ্যাপ startActivity(Intent) কল করে, সিস্টেম স্বয়ংক্রিয়ভাবে নিম্নলিখিত প্রক্রিয়াগুলি সম্পাদন করে৷ প্রতিটি প্রক্রিয়া সম্পূর্ণ হতে সময় নেয়, যা ক্রিয়াকলাপ তৈরি এবং ব্যবহারকারী যখন তাদের স্ক্রিনে ক্রিয়াকলাপের জন্য UI দেখতে পায় তখন সময়কালকে যোগ করে।

c20d14b151549937.png

একটি খণ্ডের লোডিং বোঝা

অ্যাক্টিভিটির মতোই একটি ফ্র্যাগমেন্টের লোড টাইমকে সেই সময় হিসাবে সংজ্ঞায়িত করা হয় যখন ফ্র্যাগমেন্টটি তার হোস্ট অ্যাক্টিভিটির সাথে যুক্ত হয় যতক্ষণ না ফ্র্যাগমেন্ট ভিউয়ের প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা হয়।

5. একটি কার্যকলাপের লোড সময় পরিমাপ

প্রথম ফ্রেমে বিলম্বের ফলে ব্যবহারকারীর অভিজ্ঞতা খারাপ হতে পারে, তাই আপনার ব্যবহারকারীরা কতটা প্রাথমিক লোড বিলম্বের সম্মুখীন হচ্ছে তা বোঝা গুরুত্বপূর্ণ। এই লোডের সময় পরিমাপ করতে আপনি একটি কাস্টম কোড ট্রেস করতে পারেন:

  1. অ্যাক্টিভিটি অবজেক্ট তৈরি হওয়ার সাথে সাথে অ্যাক্টিভিটি ক্লাসে কাস্টম কোড ট্রেস (নাম TestActivity-LoadTime ) শুরু করুন।

TestActivity.java

public class TestActivity extends AppCompatActivity {   
    // TODO (1): Start trace recording as soon as the Activity object is created.
    private final Trace viewLoadTrace = FirebasePerformance.startTrace("TestActivity-LoadTime");

    // ...

}
  1. onCreate() কলব্যাককে ওভাররাইড করুন, এবং setContentView() পদ্ধতিতে ভিউ যোগ করুন।
@Override     
public void onCreate(Bundle savedInstanceState) {    
    super.onCreate(savedInstanceState);          

    // Current Activity's main View (as defined in the layout xml file) is inflated after this            
    setContentView(R.layout.activity_test);          

    // ...

    // TODO (2): Get the View added by Activity's setContentView() method.         
    View mainView = findViewById(android.R.id.content);     

    // ...
}
  1. আমরা FistDrawListener এর একটি বাস্তবায়ন অন্তর্ভুক্ত করেছি, যার দুটি কলব্যাক রয়েছে: onDrawingStart() এবং onDrawingFinish() ( FirstDrawListener সম্পর্কে আরও বিশদ বিবরণের জন্য নীচের পরবর্তী বিভাগটি দেখুন এবং এর কার্যকারিতা কী প্রভাবিত করতে পারে) । Activity এর onCreate() কলব্যাকের শেষে FirstDrawListener নিবন্ধন করুন। onDrawingFinish() কলব্যাকে আপনার viewLoadTrace বন্ধ করা উচিত।

TestActivity.java

    // TODO (3): Register the callback to listen for first frame rendering (see
    //  "OnFirstDrawCallback" in FirstDrawListener) and stop the trace when View drawing is
    //  finished.
    FirstDrawListener.registerFirstDrawListener(mainView, new FirstDrawListener.OnFirstDrawCallback() {              
        @Override             
        public void onDrawingStart() {       
          // In practice you can also record this event separately
        }

        @Override             
        public void onDrawingFinish() {
            // This is when the Activity UI is completely drawn on the screen
            viewLoadTrace.stop();             
        }         
    });
  1. অ্যাপটি আবার চালান। তারপর, লগক্যাটটিকে " লগিং ট্রেস মেট্রিক " দিয়ে ফিল্টার করুন৷ LOAD ACTIVITY বোতামে আলতো চাপুন এবং নিচের মতো লগগুলি দেখুন:
I/FirebasePerformance: Logging trace metric: TestActivity-LoadTime (duration: XXXms)

🎉 অভিনন্দন! আপনি সফলভাবে একটি কার্যকলাপের লোডিং সময় পরিমাপ করেছেন এবং সেই ডেটা ফায়ারবেস পারফরম্যান্স মনিটরিং-এ রিপোর্ট করেছেন। আমরা এই কোডল্যাবে পরে Firebase কনসোলে রেকর্ড করা মেট্রিক দেখব।

FirstDrawListener এর উদ্দেশ্য

ঠিক উপরের বিভাগে, আমরা একটি FirstDrawListener নিবন্ধন করেছি। FirstDrawListener এর উদ্দেশ্য হল প্রথম ফ্রেমটি কখন শুরু হয়েছে এবং অঙ্কন শেষ হয়েছে তা পরিমাপ করা।

এটি ViewTreeObserver.OnDrawListener প্রয়োগ করে এবং onDraw() কলব্যাককে ওভাররাইড করে যা ভিউ ট্রি আঁকার সময় আহ্বান করা হয়। এটি তখন ফলাফলটিকে মোড়ক করে দুটি ইউটিলিটি কলব্যাক onDrawingStart() এবং onDrawingFinish() প্রদান করে।

FirstDrawListener এর সম্পূর্ণ কোড এই কোডল্যাবের সোর্স কোডে পাওয়া যাবে।

6. একটি খণ্ডের লোড সময় পরিমাপ করুন

একটি ফ্র্যাগমেন্টের লোড টাইম পরিমাপ করা আমরা একটি কার্যকলাপের জন্য এটিকে কীভাবে পরিমাপ করি তার অনুরূপ কিন্তু কিছু ছোটখাটো পার্থক্য সহ। আবার, আমরা একটি কাস্টম কোড ট্রেস ইনস্ট্রুমেন্ট করব:

  1. onAttach() কলব্যাক ওভাররাইড করুন এবং আপনার fragmentLoadTrace রেকর্ড করা শুরু করুন। আমরা এই ট্রেসের নাম রাখব Test-Fragment-LoadTime

আগের ধাপে যেমন ব্যাখ্যা করা হয়েছে, ফ্র্যাগমেন্ট অবজেক্ট যে কোনো সময় তৈরি করা যেতে পারে, কিন্তু এটি সক্রিয় হয়ে ওঠে শুধুমাত্র যখন এটি তার হোস্ট অ্যাক্টিভিটির সাথে সংযুক্ত থাকে।

TestFragment.java

public class TestFragment extends Fragment {

   // TODO (1): Declare the Trace variable.
   private Trace fragmentLoadTrace;

   @Override
   public void onAttach(@NonNull Context context) {
       super.onAttach(context);

       // TODO (2): Start trace recording as soon as the Fragment is attached to its host Activity.
       fragmentLoadTrace = FirebasePerformance.startTrace("TestFragment-LoadTime");
   }
  1. onViewCreated() কলব্যাকে FirstDrawListener নিবন্ধন করুন। তারপর, অ্যাক্টিভিটি উদাহরণের মতো, onDrawingFinish() এ ট্রেস বন্ধ করুন।

TestFragment.java

@Override
public void onViewCreated(@NonNull View mainView, Bundle savedInstanceState) {
   super.onViewCreated(mainView, savedInstanceState);

   // ...

   // TODO (3): Register the callback to listen for first frame rendering (see
   //  "OnFirstDrawCallback" in FirstDrawListener) and stop the trace when view drawing is
   //  finished.
   FirstDrawListener.registerFirstDrawListener(mainView, new FirstDrawListener.OnFirstDrawCallback() {

       @Override
       public void onDrawingStart() {
           // In practice you can also record this event separately
       }

       @Override
       public void onDrawingFinish() {
           // This is when the Fragment UI is completely drawn on the screen
           fragmentLoadTrace.stop();
       }
   });
  1. অ্যাপটি আবার চালান। তারপর, লগক্যাটটিকে " লগিং ট্রেস মেট্রিক " দিয়ে ফিল্টার করুন৷ LOAD FRAGMENT বোতামে আলতো চাপুন এবং নীচের মতো লগগুলি সন্ধান করুন:
I/FirebasePerformance: Logging trace metric: TestFragment-LoadTime (duration: XXXms)

🎉 অভিনন্দন! আপনি সফলভাবে একটি ফ্র্যাগমেন্টের লোডিং সময় পরিমাপ করেছেন এবং সেই ডেটা ফায়ারবেস পারফরম্যান্স মনিটরিং-এ রিপোর্ট করেছেন। আমরা এই কোডল্যাবে পরে Firebase কনসোলে রেকর্ড করা মেট্রিক দেখব।

7. স্ক্রীন রেন্ডারিং বোঝা এবং একটি ধীর/হিমায়িত ফ্রেম কি

UI রেন্ডারিং হল আপনার অ্যাপ থেকে একটি ফ্রেম তৈরি করা এবং সেটিকে স্ক্রিনে দেখানোর কাজ। আপনার অ্যাপের সাথে ব্যবহারকারীর মিথস্ক্রিয়া যাতে মসৃণ হয় তা নিশ্চিত করার জন্য, প্রতি সেকেন্ডে 60 ফ্রেম অর্জনের জন্য আপনার অ্যাপের ফ্রেমগুলি 16ms এর কম রেন্ডার করা উচিত ( কেন 60fps? )। যদি আপনার অ্যাপটি ধীরগতির UI রেন্ডারিং-এ ভুগে থাকে, তাহলে সিস্টেমটি ফ্রেমগুলি এড়িয়ে যেতে বাধ্য হয় এবং ব্যবহারকারী আপনার অ্যাপে তোতলামি দেখতে পাবেন৷ আমরা এই ঝাঁক কল.

একইভাবে, হিমায়িত ফ্রেমগুলি হল UI ফ্রেম যা রেন্ডার হতে 700ms এর বেশি সময় নেয়৷ এই বিলম্বটি একটি সমস্যা কারণ আপনার অ্যাপটি আটকে আছে এবং ফ্রেমটি রেন্ডার করার সময় প্রায় এক সেকেন্ডের জন্য ব্যবহারকারীর ইনপুটের প্রতি প্রতিক্রিয়াশীল নয়৷

8. একটি খণ্ডের ধীর/হিমায়িত ফ্রেম পরিমাপ করুন

ফায়ারবেস পারফরম্যান্স মনিটরিং স্বয়ংক্রিয়ভাবে একটি ক্রিয়াকলাপের জন্য ধীর/হিমায়িত ফ্রেম ক্যাপচার করে ( কিন্তু শুধুমাত্র যদি এটি হার্ডওয়্যার ত্বরিত হয় )। যাইহোক, এই বৈশিষ্ট্যটি বর্তমানে ফ্র্যাগমেন্টের জন্য উপলব্ধ নয়। একটি ফ্র্যাগমেন্টের ধীর/হিমায়িত ফ্রেমগুলিকে ফ্র্যাগমেন্টের জীবনচক্রে onFragmentAttached() এবং onFragmentDetached() কলব্যাকের মধ্যে সমগ্র কার্যকলাপের জন্য ধীর/হিমায়িত ফ্রেম হিসাবে সংজ্ঞায়িত করা হয়।

AppStateMonitor ক্লাস থেকে অনুপ্রেরণা নিয়ে ( যা কার্য সম্পাদনের জন্য স্ক্রীন ট্রেস রেকর্ড করার জন্য দায়ী পারফরম্যান্স মনিটরিং SDK-এর একটি অংশ ), আমরা ScreenTrace ক্লাস বাস্তবায়ন করেছি ( যা এই কোডল্যাব সোর্স কোড রেপোর অংশ )। ScreenTrace ক্লাসকে অ্যাক্টিভিটির FragmentManager এর লাইফসাইকেল কলব্যাকের সাথে যুক্ত করা যেতে পারে ধীর/হিমায়িত ফ্রেম ক্যাপচার করতে। এই ক্লাস দুটি পাবলিক API প্রদান করে:

  • recordScreenTrace() : একটি স্ক্রীন ট্রেস রেকর্ড করা শুরু করে
  • sendScreenTrace() : একটি স্ক্রীন ট্রেসের রেকর্ডিং বন্ধ করে এবং মোট, ধীর এবং হিমায়িত ফ্রেমের সংখ্যা লগ করার জন্য কাস্টম মেট্রিক্স সংযুক্ত করে

এই কাস্টম মেট্রিকগুলি সংযুক্ত করার মাধ্যমে, টুকরোগুলির জন্য স্ক্রীন ট্রেসগুলিকে একটি কার্যকলাপের জন্য স্ক্রীন ট্রেসের মতো একইভাবে পরিচালনা করা যেতে পারে এবং Firebase কনসোলের পারফরম্যান্স ড্যাশবোর্ডে অন্যান্য স্ক্রীন রেন্ডারিং ট্রেসের সাথে প্রদর্শিত হতে পারে৷

আপনার ফ্র্যাগমেন্টের জন্য স্ক্রীন ট্রেসগুলি কীভাবে লগ করবেন তা এখানে রয়েছে:

  1. আপনার কার্যকলাপে ScreenTrace ক্লাস শুরু করুন যা ফ্র্যাগমেন্ট হোস্ট করে।

MainActivity.java

// Declare the Fragment tag
private static final String FRAGMENT_TAG = TestFragment.class.getSimpleName();

// TODO (1): Declare the ScreenTrace variable.
private ScreenTrace screenTrace;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // TODO (2): Initialize the ScreenTrace variable.
    screenTrace = new ScreenTrace(this, FRAGMENT_TAG);

    // ...
}
  1. আপনি যখন আপনার ফ্র্যাগমেন্ট লোড করবেন, FragmentLifecycleCallbacks জন্য নিবন্ধন করুন এবং onFragmentAttached() এবং onFragmentDetached() কলব্যাকগুলিকে ওভাররাইড করুন৷ আমরা আপনার জন্য এই কাজ করেছি. আপনাকে onFragmentAttached() কলব্যাকে স্ক্রীন ট্রেস রেকর্ড করা শুরু করতে হবে এবং onFragmentDetached() কলব্যাকে রেকর্ডিং বন্ধ করতে হবে।

MainActivity.java

private final FragmentManager.FragmentLifecycleCallbacks fragmentLifecycleCallbacks =
       new FragmentManager.FragmentLifecycleCallbacks() {

           @Override
           public void onFragmentAttached(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Context context) {
               super.onFragmentAttached(fm, f, context);

               // TODO (3): Start recording the screen traces as soon as the Fragment is
               //  attached to its host Activity.
               if (FRAGMENT_TAG.equals(f.getTag()) && screenTrace.isScreenTraceSupported()) {
                   screenTrace.recordScreenTrace();
               }
           }

           @Override
           public void onFragmentDetached(@NonNull FragmentManager fm, @NonNull Fragment f) {
               super.onFragmentDetached(fm, f);

               // TODO (4): Stop recording the screen traces as soon as the Fragment is
               //  detached from its host Activity.
               if (FRAGMENT_TAG.equals(f.getTag()) && screenTrace.isScreenTraceSupported()) {
                   screenTrace.sendScreenTrace();
               }

               // Unregister Fragment lifecycle callbacks after the Fragment is detached
               fm.unregisterFragmentLifecycleCallbacks(fragmentLifecycleCallbacks);
           }
       };
  1. অ্যাপটি আবার চালান। তারপরে, LOAD FRAGMENT বোতামে আলতো চাপুন। কয়েক সেকেন্ডের জন্য অপেক্ষা করুন, তারপর নীচের নেভিগেশন বারে back button ক্লিক করুন৷

লগক্যাটটিকে " লগিং ট্রেস মেট্রিক " দিয়ে ফিল্টার করুন, তারপর নিচের মতো লগগুলি দেখুন:

I/FirebasePerformance: Logging trace metric: _st_MainActivity-TestFragment (duration: XXXms)

লগক্যাটটিকে " FireperfViews " দিয়ে ফিল্টার করুন, তারপর নিচের মতো লগগুলি দেখুন:

D/FireperfViews: sendScreenTrace MainActivity-TestFragment, name: _st_MainActivity-TestFragment, total_frames: XX, slow_frames: XX, frozen_frames: XX

🎉 অভিনন্দন! আপনি সফলভাবে একটি খণ্ডের জন্য ধীর/হিমায়িত ফ্রেমগুলি পরিমাপ করেছেন এবং সেই ডেটা ফায়ারবেস পারফরম্যান্স মনিটরিংয়ে রিপোর্ট করেছেন৷ আমরা এই কোডল্যাবে পরে Firebase কনসোলে রেকর্ড করা মেট্রিক্স দেখব।

9. Firebase কনসোলে মেট্রিক্স চেক করুন

  1. লগক্যাটে, একটি ট্রেসের জন্য বিশদ পৃষ্ঠা দেখার জন্য Firebase কনসোল URL-এ ক্লিক করুন৷ ceb9d5ba51bb6e89.jpeg

বিকল্পভাবে, Firebase কনসোলে , আপনার অ্যাপ আছে এমন প্রজেক্ট নির্বাচন করুন। বাম প্যানেলে, রিলিজ এবং মনিটর বিভাগটি সনাক্ত করুন, তারপরে পারফরম্যান্সে ক্লিক করুন।

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

a0d8455c5269a590.png

  1. কাস্টম কোড ট্রেসের বিস্তারিত পৃষ্ঠা আপনাকে ট্রেসের সময়কাল সম্পর্কে তথ্য দেখায় (অর্থাৎ, পরিমাপ করা লোড সময়)।

5e92a307b7410d8b.png

  1. আপনি আপনার কাস্টম স্ক্রীন ট্রেসের জন্য কর্মক্ষমতা ডেটা দেখতে পারেন।
  • মূল ড্যাশবোর্ড ট্যাবে ফিরে যান, ট্রেস টেবিলে নিচে স্ক্রোল করুন, তারপর স্ক্রীন রেন্ডারিং ট্যাবে ক্লিক করুন। এই সারণীতে, আপনি কাস্টম স্ক্রীন ট্রেসগুলি দেখতে পাবেন যা আমরা আগে যুক্ত করেছি এবং যেকোনও বাইরের স্ক্রীন ট্রেসগুলি দেখতে পাবেন, যেমন MainActivity ট্রেস৷
  • আপনার কাস্টম স্ক্রিন ট্রেস, MainActivity-TestFragment খুঁজুন। ধীর রেন্ডারিং এবং হিমায়িত ফ্রেমের সমষ্টিগত ডেটা দেখতে ট্রেস নামের উপর ক্লিক করুন।

ee7890c7e2c28740.png

10. অভিনন্দন

অভিনন্দন! আপনি ফায়ারবেস পারফরম্যান্স মনিটরিং ব্যবহার করে একটি কার্যকলাপ এবং একটি অংশের লোড টাইম এবং স্ক্রীন রেন্ডারিং পারফরম্যান্স সফলভাবে পরিমাপ করেছেন!

আপনি যা সম্পন্ন করেছেন

এরপর কি

Firebase পারফরম্যান্স কাস্টম ট্রেস ছাড়া আপনার অ্যাপের কর্মক্ষমতা পরিমাপের আরও উপায় প্রদান করে। এটি স্বয়ংক্রিয়ভাবে অ্যাপ শুরুর সময়, অ্যাপ-ইন-ফোরগ্রাউন্ড এবং অ্যাপ-ইন-ব্যাকগ্রাউন্ড পারফরম্যান্স ডেটা পরিমাপ করে। আপনার Firebase কনসোলে এই মেট্রিক্সগুলি পরীক্ষা করার সময় এসেছে৷

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

বোনাস

এখন যেহেতু আপনি কাস্টম কোড ট্রেস ব্যবহার করে আপনার অ্যাক্টিভিটি/ফ্র্যাগমেন্টের লোড টাইম এবং স্ক্রিন রেন্ডারিং পারফরম্যান্স কীভাবে পরিমাপ করতে জানেন, আপনি কি আমাদের ওপেন সোর্সড কোড বেস অন্বেষণ করতে পারেন যে কোনও কার্যকলাপ/খণ্ডের জন্য আপনি সেই মেট্রিকগুলিকে বক্সের বাইরে ক্যাপচার করতে পারেন কিনা। যে অ্যাপের একটি অংশ? আপনি যদি চান তাহলে নির্দ্বিধায় PR পাঠান :-)

11. বোনাস লার্নিং

একটি ক্রিয়াকলাপ লোড করার সময় কী ঘটছে তা বোঝা আপনাকে আপনার অ্যাপের কার্যকারিতা বৈশিষ্ট্যগুলি আরও ভালভাবে বুঝতে সহায়তা করবে৷ একটি পূর্ববর্তী ধাপে, আমরা একটি উচ্চ স্তরে বর্ণনা করেছি যে একটি ক্রিয়াকলাপ লোড করার সময় কী ঘটে, কিন্তু নিম্নলিখিত চিত্রটি প্রতিটি ধাপকে অনেক বেশি বিশদে বর্ণনা করে।

cd61c1495fad7961.png