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

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

,

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। অভিনন্দন

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

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

এরপর কি

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

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

বোনাস

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

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

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

CD61C1495FAD7961.png

,

1. ভূমিকা

সর্বশেষ আপডেট: 2021-03-11

কেন আমাদের দর্শনগুলির কার্যকারিতা পরিমাপ করা দরকার?

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

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

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

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

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

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

  • অ্যান্ড্রয়েড স্টুডিও 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

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

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

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

আপনার অ্যাপ্লিকেশনটি ফায়ারবেসে সংযুক্ত করুন

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

E791BED0999DB1E0.png

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

42C498D28EAD2B77.png

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

dda8bdd9488167a0.png

আপনার অ্যাপ্লিকেশনটিতে পারফরম্যান্স মনিটরিং যুক্ত করুন

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

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

9B58145ACC4BE030.png

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

AA0D46FC944E0C0B.PNG

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

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

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

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

410D8686B4F45C33.png

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

4 .. কোনও ক্রিয়াকলাপ বা খণ্ডের লোডিং বোঝা

এই পদক্ষেপে, আমরা কোনও ক্রিয়াকলাপ বা খণ্ড লোড করার সময় সিস্টেমটি কী করছে তা শিখব।

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

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

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

C20D14B151549937.png

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

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

5। কোনও ক্রিয়াকলাপের লোড সময় পরিমাপ করুন

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

  1. ক্রিয়াকলাপের অবজেক্টটি তৈরি হওয়ার সাথে সাথে ক্রিয়াকলাপ শ্রেণিতে কাস্টম কোড ট্রেস (নামকরণ 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 সম্পর্কে আরও তথ্যের জন্য এবং এর কার্যকারিতা কী কী প্রভাব ফেলতে পারে সে সম্পর্কে নীচের পরবর্তী বিভাগটি দেখুন )। ক্রিয়াকলাপের onCreate() কলব্যাকের শেষে FirstDrawListener নিবন্ধন করুন। আপনার viewLoadTrace onDrawingFinish() কলব্যাকে বন্ধ করা উচিত।

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

    // 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)

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

ফার্স্টড্রোলিস্টনার উদ্দেশ্য

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

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

FirstDrawListener জন্য সম্পূর্ণ কোডটি এই কোডেল্যাবের উত্স কোডে পাওয়া যাবে।

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

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

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

পূর্ববর্তী পদক্ষেপে যেমন ব্যাখ্যা করা হয়েছে, খণ্ডটি যে কোনও সময় তৈরি করা যেতে পারে তবে এটি কেবল তখনই সক্রিয় হয়ে যায় যখন এটি তার হোস্ট ক্রিয়াকলাপের সাথে সংযুক্ত থাকে।

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

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() এর ট্রেসটি বন্ধ করুন।

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

@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)

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

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

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

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

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

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

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

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

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

আপনার খণ্ডের জন্য কীভাবে স্ক্রিন ট্রেস লগ করবেন তা এখানে:

  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)

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

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

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

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

  1. লগক্যাটে, ট্রেসের জন্য বিশদ পৃষ্ঠাটি দেখতে ফায়ারবেস কনসোল ইউআরএলটি ক্লিক করুন। Ceb9d5ba51bb6e89.jpeg

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

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

A0D8455C5269A590.png

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

5E92A307B7410D8B.PNG

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

EE7890C7E2C28740.png

10। অভিনন্দন

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

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

এরপর কি

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

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

বোনাস

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

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

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

CD61C1495FAD7961.png

,

1. ভূমিকা

সর্বশেষ আপডেট: 2021-03-11

কেন আমাদের দর্শনগুলির কার্যকারিতা পরিমাপ করা দরকার?

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

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

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

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

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

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

  • অ্যান্ড্রয়েড স্টুডিও 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

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

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

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

আপনার অ্যাপ্লিকেশনটি ফায়ারবেসে সংযুক্ত করুন

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

E791BED0999DB1E0.png

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

42C498D28EAD2B77.png

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

dda8bdd9488167a0.png

আপনার অ্যাপ্লিকেশনটিতে পারফরম্যান্স মনিটরিং যুক্ত করুন

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

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

9B58145ACC4BE030.png

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

AA0D46FC944E0C0B.PNG

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

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

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

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

410D8686B4F45C33.png

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

4 .. কোনও ক্রিয়াকলাপ বা খণ্ডের লোডিং বোঝা

এই পদক্ষেপে, আমরা কোনও ক্রিয়াকলাপ বা খণ্ড লোড করার সময় সিস্টেমটি কী করছে তা শিখব।

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

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

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

C20D14B151549937.png

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

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

5। কোনও ক্রিয়াকলাপের লোড সময় পরিমাপ করুন

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

  1. ক্রিয়াকলাপের অবজেক্টটি তৈরি হওয়ার সাথে সাথে ক্রিয়াকলাপ শ্রেণিতে কাস্টম কোড ট্রেস (নামকরণ 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 সম্পর্কে আরও তথ্যের জন্য এবং এর কার্যকারিতা কী কী প্রভাব ফেলতে পারে সে সম্পর্কে নীচের পরবর্তী বিভাগটি দেখুন )। ক্রিয়াকলাপের onCreate() কলব্যাকের শেষে FirstDrawListener নিবন্ধন করুন। আপনার viewLoadTrace onDrawingFinish() কলব্যাকে বন্ধ করা উচিত।

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

    // 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)

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

ফার্স্টড্রোলিস্টনার উদ্দেশ্য

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

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

FirstDrawListener জন্য সম্পূর্ণ কোডটি এই কোডেল্যাবের উত্স কোডে পাওয়া যাবে।

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

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

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

পূর্ববর্তী পদক্ষেপে যেমন ব্যাখ্যা করা হয়েছে, খণ্ডটি যে কোনও সময় তৈরি করা যেতে পারে তবে এটি কেবল তখনই সক্রিয় হয়ে যায় যখন এটি তার হোস্ট ক্রিয়াকলাপের সাথে সংযুক্ত থাকে।

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

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() এর ট্রেসটি বন্ধ করুন।

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

@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)

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

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

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

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

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

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

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

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

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

আপনার খণ্ডের জন্য কীভাবে স্ক্রিন ট্রেস লগ করবেন তা এখানে:

  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. When you load your Fragment, register for FragmentLifecycleCallbacks and override the onFragmentAttached() and onFragmentDetached() callbacks. আমরা আপনার জন্য এই কাজ করেছি. You need to start recording screen traces in the onFragmentAttached() callback and stop recording in the onFragmentDetached() callback.

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. Re-run the app. Then, tap on the LOAD FRAGMENT button. Wait for a few seconds, then click the back button on the bottom navigation bar.

Filter the logcat with " Logging trace metric ", then look for logs like below:

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

Filter the logcat with " FireperfViews ", then look for logs like below:

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

🎉 অভিনন্দন! You've successfully measured the Slow/Frozen frames for a Fragment and reported that data to Firebase Performance Monitoring. We'll view the recorded metrics in the Firebase console later in this codelab.

9. Check metrics in the Firebase console

  1. In the logcat, click the Firebase console URL to visit the details page for a trace. ceb9d5ba51bb6e89.jpeg

Alternatively, in the Firebase console , select the project that has your app. In the left panel, locate the Release & Monitor section, then click Performance .

  • In the main Dashboard tab, scroll down to the traces table, then click the Custom traces tab. In this table, you'll see the custom code traces we added earlier plus some out-of-the-box traces , such as _app_start trace.
  • Find your two custom code traces, TestActivity-LoadTime and TestFragment-LoadTime . Click on the Duration for either one to view more details about the collected data.

a0d8455c5269a590.png

  1. The detail page for the custom code trace shows you information about the duration of the trace (ie, the measured load time).

5e92a307b7410d8b.png

  1. You can also view the performance data for your custom screen trace.
  • Go back to the main Dashboard tab, scroll down to the traces table, then click the Screen rendering tab. In this table, you'll see the custom screen traces we added earlier plus any out-of-the-box screen traces , such as MainActivity trace.
  • Find your custom screen trace, MainActivity-TestFragment . Click the trace name to view the aggregated data of slow rendering and frozen frames.

ee7890c7e2c28740.png

10. Congratulations

অভিনন্দন! You've successfully measured load time and screen rendering performance of an Activity and a Fragment by using Firebase Performance Monitoring!

What you have accomplished

এরপর কি

Firebase Performance provides more ways of performance measurement of your app other than custom trace. It automatically measures app startup time, app-in-foreground, and app-in-background performance data . It's time for you to check these metrics in the Firebase Console .

Also, Firebase Performance offers automatic HTTP/S network request monitoring . With that you can easily instrument network requests without writing a single line of code. Can you try sending some network requests from your app and find the metrics in the Firebase console ?

বোনাস

Now that you know how to measure the load time and screen rendering performance of your Activity/Fragment by using custom code traces, can you explore our open sourced code base to see if you can capture those metrics out of the box for any Activity/Fragment that is a part of the app? Feel free to send the PR if you wish :-)

11. Bonus Learning

Understanding what's happening during the loading of an Activity will help you better understand the performance characteristics of your app. In an earlier step, we described at a high level what happens during the loading of an Activity, but the following diagram describes each phase in much higher detail.

cd61c1495fad7961.png