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

1. ভূমিকা

শেষ আপডেট: ২০২১-০৩-১১

ভিউ-এর কর্মক্ষমতা পরিমাপ করার প্রয়োজন কেন?

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

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

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

তুমি কি শিখবে

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

তোমার যা লাগবে

  • অ্যান্ড্রয়েড স্টুডিও ৪.০ বা তার বেশি
  • একটি অ্যান্ড্রয়েড ডিভাইস/এমুলেটর
  • জাভা সংস্করণ ৮ বা তার বেশি

2. সেট আপ করা

কোডটি পান

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

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

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

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

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

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

  1. আপনি Android Studio এবং Firebase Assistant-এর সর্বশেষ সংস্করণ ব্যবহার করছেন কিনা তা নিশ্চিত করতে Android Studio / Help > আপডেটের জন্য চেক করুন- এ যান।
  2. সহকারী ফলকটি খুলতে সরঞ্জাম > ফায়ারবেস নির্বাচন করুন।
    e791bed0999db1e0.png
  3. আপনার অ্যাপে যোগ করার জন্য পারফরম্যান্স মনিটরিং বেছে নিন, তারপর Get started with Performance Monitoring এ ক্লিক করুন।
  4. একটি নতুন প্রকল্প তৈরি করতে বোতামটি ক্লিক করুন, এবং তারপর একটি প্রকল্পের নাম লিখুন (উদাহরণস্বরূপ, Measure Performance Codelab )।
  5. চালিয়ে যান ক্লিক করুন।
  6. যদি অনুরোধ করা হয়, তাহলে Firebase শর্তাবলী পর্যালোচনা করুন এবং গ্রহণ করুন, এবং তারপর Continue এ ক্লিক করুন।
  7. (ঐচ্ছিক) Firebase কনসোলে ("Gemini in Firebase" নামে পরিচিত) AI সহায়তা সক্ষম করুন।
  8. এই কোডল্যাবের জন্য, আপনার গুগল অ্যানালিটিক্সের প্রয়োজন নেই , তাই গুগল অ্যানালিটিক্স বিকল্পটি টগল করে বন্ধ করে দিন
  9. এরপর আপনার নতুন Firebase অ্যাপটিকে আপনার Android Studio প্রকল্পের সাথে সংযুক্ত করার জন্য একটি ডায়ালগ দেখতে পাবেন।
    42c498d28ead2b77.png সম্পর্কে
  10. অ্যান্ড্রয়েড স্টুডিওতে ফিরে, অ্যাসিস্ট্যান্ট প্যানে, আপনার অ্যাপটি ফায়ারবেসের সাথে সংযুক্ত রয়েছে তা নিশ্চিতকরণ দেখতে পাবেন।
    dda8bdd9488167a0.png সম্পর্কে

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

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

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

9b58145acc4be030.png সম্পর্কে

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

aa0d46fc944e0c0b.png সম্পর্কে

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

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

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

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

410d8686b4f45c33.png সম্পর্কে

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

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

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

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

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

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

c20d14b151549937.png সম্পর্কে

একটি টুকরো লোড করা বোঝা

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

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

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

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

টেস্টঅ্যাক্টিভিটি.জাভা

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 বন্ধ করা উচিত।

টেস্টঅ্যাক্টিভিটি.জাভা

    // 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 Performance Monitoring-এ রিপোর্ট করেছেন। আমরা এই কোডল্যাবে পরে Firebase কনসোলে রেকর্ড করা মেট্রিকটি দেখব।

FirstDrawListener এর উদ্দেশ্য

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

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

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

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

একটি Fragment এর লোড টাইম পরিমাপ করা একটি Activity এর জন্য আমরা যেভাবে পরিমাপ করি তার অনুরূপ, তবে কিছু ছোটখাটো পার্থক্য রয়েছে। আবার, আমরা একটি কাস্টম কোড ট্রেস তৈরি করব:

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

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

টেস্টফ্রেগমেন্ট.জাভা

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 নিবন্ধন করুন। তারপর, Activity উদাহরণের মতো, onDrawingFinish() এ ট্রেসটি বন্ধ করুন।

টেস্টফ্রেগমেন্ট.জাভা

@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 Performance Monitoring-এ রিপোর্ট করেছেন। আমরা এই কোডল্যাবে পরে Firebase কনসোলে রেকর্ড করা মেট্রিকটি দেখব।

৭. স্ক্রিন রেন্ডারিং এবং স্লো/ফ্রোজেন ফ্রেম কী তা বোঝা

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

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

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

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

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

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

এই কাস্টম মেট্রিক্স সংযুক্ত করে, ফ্র্যাগমেন্টের স্ক্রিন ট্রেসগুলি কোনও অ্যাক্টিভিটির স্ক্রিন ট্রেসের মতোই পরিচালনা করা যেতে পারে এবং ফায়ারবেস কনসোলের পারফরম্যান্স ড্যাশবোর্ডে অন্যান্য স্ক্রিন রেন্ডারিং ট্রেসের সাথে প্রদর্শিত হতে পারে।

আপনার Fragment-এর জন্য স্ক্রিন ট্রেস কীভাবে লগ করবেন তা এখানে দেওয়া হল:

  1. আপনার অ্যাক্টিভিটিতে ScreenTrace ক্লাসটি শুরু করুন যেখানে Fragment হোস্ট করা হয়েছে।

মেইনঅ্যাক্টিভিটি.জাভা

// 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. যখন আপনি আপনার Fragment লোড করবেন, তখন FragmentLifecycleCallbacks এর জন্য নিবন্ধন করুন এবং onFragmentAttached() এবং onFragmentDetached() কলব্যাকগুলিকে ওভাররাইড করুন। আমরা আপনার জন্য এটি করেছি। আপনাকে onFragmentAttached() কলব্যাকে স্ক্রিন ট্রেস রেকর্ড করা শুরু করতে হবে এবং onFragmentDetached() কলব্যাকে রেকর্ডিং বন্ধ করতে হবে।

মেইনঅ্যাক্টিভিটি.জাভা

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 ক্লিক করুন।

" Logging trace metric " দিয়ে logcat ফিল্টার করুন, তারপর নিচের মতো লগগুলি সন্ধান করুন:

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 পারফরম্যান্স মনিটরিং-এ রিপোর্ট করেছেন। আমরা এই কোডল্যাবে পরে Firebase কনসোলে রেকর্ড করা মেট্রিক্সগুলি দেখব।

৯. ফায়ারবেস কনসোলে মেট্রিক্স পরীক্ষা করুন

  1. লগক্যাটে, ট্রেসের জন্য বিশদ পৃষ্ঠায় যেতে Firebase কনসোল URL-এ ক্লিক করুন। অনুসরণ

অথবা, Firebase কনসোলে , আপনার অ্যাপটি আছে এমন প্রকল্পটি নির্বাচন করুন। বাম প্যানেলে, Release & Monitor বিভাগটি খুঁজুন, তারপর Performance এ ক্লিক করুন।

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

a0d8455c5269a590.png সম্পর্কে

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

5e92a307b7410d8b.png সম্পর্কে

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

ee7890c7e2c28740.png সম্পর্কে

১০. অভিনন্দন

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

তুমি যা অর্জন করেছো

এরপর কি?

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

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

বোনাস

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

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

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

cd61c1495fad7961.png সম্পর্কে