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-এ সংযুক্ত করুন
- অ্যান্ড্রয়েড স্টুডিও / সাহায্যে যান > আপনি Android স্টুডিও এবং ফায়ারবেস সহকারীর সর্বশেষ সংস্করণ ব্যবহার করছেন কিনা তা নিশ্চিত করতে আপডেটগুলি পরীক্ষা করুন ৷
- সহায়ক ফলকটি খুলতে সরঞ্জাম > ফায়ারবেস নির্বাচন করুন।
- আপনার অ্যাপে যোগ করতে পারফরম্যান্স মনিটরিং বেছে নিন, তারপরে পারফরম্যান্স মনিটরিং দিয়ে শুরু করুন ক্লিক করুন।
- Firebase এর সাথে আপনার অ্যান্ড্রয়েড প্রজেক্ট সংযোগ করতে Firebase-এর সাথে Connect-এ ক্লিক করুন (এটি আপনার ব্রাউজারে Firebase কনসোল খুলবে) ।
- Firebase কনসোলে, প্রকল্প যোগ করুন ক্লিক করুন, তারপর একটি Firebase প্রকল্পের নাম লিখুন (যদি আপনার ইতিমধ্যেই একটি Firebase প্রকল্প থাকে, তাহলে আপনি পরিবর্তে সেই বিদ্যমান প্রকল্পটি নির্বাচন করতে পারেন) । Firebase প্রকল্প এবং একটি নতুন Firebase অ্যাপ তৈরি করতে Continue-এ ক্লিক করুন এবং শর্তাবলী স্বীকার করুন।
- আপনার নতুন ফায়ারবেস অ্যাপটিকে আপনার অ্যান্ড্রয়েড স্টুডিও প্রকল্পের সাথে সংযুক্ত করার জন্য আপনাকে পরবর্তীতে একটি ডায়ালগ দেখতে হবে।
- অ্যান্ড্রয়েড স্টুডিও-তে ফিরে এসে, অ্যাসিস্ট্যান্ট প্যানে, আপনার অ্যাপটি Firebase-এর সাথে কানেক্ট করা আছে তা নিশ্চিতকরণ দেখতে হবে।
আপনার অ্যাপে পারফরম্যান্স মনিটরিং যোগ করুন
অ্যান্ড্রয়েড স্টুডিওতে অ্যাসিস্ট্যান্ট প্যানে, আপনার অ্যাপে পারফরম্যান্স মনিটরিং যোগ করুন- এ ক্লিক করুন।
আপনি পরিবর্তনগুলি স্বীকার করার জন্য একটি ডায়ালগ দেখতে পাবেন যার পরে সমস্ত প্রয়োজনীয় নির্ভরতা যোগ করা হয়েছে তা নিশ্চিত করতে অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ সিঙ্ক করবে।
অবশেষে, আপনি Android স্টুডিওতে সহকারী ফলকে সাফল্যের বার্তাটি দেখতে পাবেন যে সমস্ত নির্ভরতা সঠিকভাবে সেট আপ করা হয়েছে।
একটি অতিরিক্ত পদক্ষেপ হিসাবে, "(ঐচ্ছিক) ডিবাগ লগিং সক্ষম করুন" ধাপে নির্দেশাবলী অনুসরণ করে ডিবাগ লগিং সক্ষম করুন৷ একই নির্দেশাবলী পাবলিক ডকুমেন্টেশনেও পাওয়া যায়।
3. অ্যাপটি চালান
আপনি যদি পারফরম্যান্স মনিটরিং SDK-এর সাথে আপনার অ্যাপ সফলভাবে সংহত করে থাকেন, তাহলে প্রকল্পটি এখন কম্পাইল করা উচিত। অ্যান্ড্রয়েড স্টুডিওতে, আপনার সংযুক্ত অ্যান্ড্রয়েড ডিভাইস/এমুলেটরে অ্যাপটি তৈরি করতে এবং চালাতে রান > রান 'অ্যাপ' এ ক্লিক করুন।
অ্যাপটিতে দুটি বোতাম রয়েছে যা আপনাকে একটি সংশ্লিষ্ট কার্যকলাপ এবং খণ্ডে নিয়ে যায়, যেমন:
এই কোডল্যাবের নিম্নলিখিত ধাপে, আপনি শিখবেন কীভাবে আপনার কার্যকলাপ বা খণ্ডের লোড সময় এবং স্ক্রীন রেন্ডারিং কার্যক্ষমতা পরিমাপ করবেন।
4. একটি কার্যকলাপ বা খণ্ডের লোডিং বোঝা
এই ধাপে, আমরা শিখব যে একটি কার্যকলাপ বা ফ্র্যাগমেন্ট লোড করার সময় সিস্টেমটি কী করছে।
একটি কার্যকলাপের লোডিং বোঝা
একটি ক্রিয়াকলাপের জন্য, লোডের সময়কে সংজ্ঞায়িত করা হয় যখন অ্যাক্টিভিটি অবজেক্টটি তৈরি করা হয় তখন থেকে শুরু করে প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা না হওয়া পর্যন্ত ( এটি তখনই যখন আপনার ব্যবহারকারী প্রথমটির জন্য কার্যকলাপের জন্য সম্পূর্ণ UI দেখতে পাবেন সময় )। আপনার অ্যাপটি সম্পূর্ণভাবে আঁকা হয়েছে কিনা তা পরিমাপ করতে, আপনি অ্যাপ্লিকেশন লঞ্চ এবং সমস্ত সংস্থানগুলির সম্পূর্ণ প্রদর্শনের মধ্যে অতিবাহিত সময় পরিমাপ করতে এবং শ্রেণিবিন্যাস দেখতে reportFullyDrawn()
পদ্ধতি ব্যবহার করতে পারেন।
একটি উচ্চ স্তরে, যখন আপনার অ্যাপ startActivity(Intent)
কল করে, সিস্টেম স্বয়ংক্রিয়ভাবে নিম্নলিখিত প্রক্রিয়াগুলি সম্পাদন করে৷ প্রতিটি প্রক্রিয়া সম্পূর্ণ হতে সময় নেয়, যা ক্রিয়াকলাপ তৈরি এবং ব্যবহারকারী যখন তাদের স্ক্রিনে ক্রিয়াকলাপের জন্য UI দেখতে পায় তখন সময়কালকে যোগ করে।
একটি খণ্ডের লোডিং বোঝা
অ্যাক্টিভিটির মতোই একটি ফ্র্যাগমেন্টের লোড টাইমকে সেই সময় হিসাবে সংজ্ঞায়িত করা হয় যখন ফ্র্যাগমেন্টটি তার হোস্ট অ্যাক্টিভিটির সাথে যুক্ত হয় যতক্ষণ না ফ্র্যাগমেন্ট ভিউয়ের প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা হয়।
5. একটি কার্যকলাপের লোড সময় পরিমাপ
প্রথম ফ্রেমে বিলম্বের ফলে ব্যবহারকারীর অভিজ্ঞতা খারাপ হতে পারে, তাই আপনার ব্যবহারকারীরা কতটা প্রাথমিক লোড বিলম্বের সম্মুখীন হচ্ছে তা বোঝা গুরুত্বপূর্ণ। এই লোডের সময় পরিমাপ করতে আপনি একটি কাস্টম কোড ট্রেস করতে পারেন:
- অ্যাক্টিভিটি অবজেক্ট তৈরি হওয়ার সাথে সাথে অ্যাক্টিভিটি ক্লাসে কাস্টম কোড ট্রেস (নাম
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");
// ...
}
-
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);
// ...
}
- আমরা
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();
}
});
- অ্যাপটি আবার চালান। তারপর, লগক্যাটটিকে " লগিং ট্রেস মেট্রিক " দিয়ে ফিল্টার করুন৷
LOAD ACTIVITY
বোতামে আলতো চাপুন এবং নিচের মতো লগগুলি দেখুন:
I/FirebasePerformance: Logging trace metric: TestActivity-LoadTime (duration: XXXms)
🎉 অভিনন্দন! আপনি সফলভাবে একটি কার্যকলাপের লোডিং সময় পরিমাপ করেছেন এবং সেই ডেটা ফায়ারবেস পারফরম্যান্স মনিটরিং-এ রিপোর্ট করেছেন। আমরা এই কোডল্যাবে পরে Firebase কনসোলে রেকর্ড করা মেট্রিক দেখব।
FirstDrawListener এর উদ্দেশ্য
ঠিক উপরের বিভাগে, আমরা একটি FirstDrawListener
নিবন্ধন করেছি। FirstDrawListener
এর উদ্দেশ্য হল প্রথম ফ্রেমটি কখন শুরু হয়েছে এবং অঙ্কন শেষ হয়েছে তা পরিমাপ করা।
এটি ViewTreeObserver.OnDrawListener
প্রয়োগ করে এবং onDraw()
কলব্যাককে ওভাররাইড করে যা ভিউ ট্রি আঁকার সময় আহ্বান করা হয়। এটি তখন ফলাফলটিকে মোড়ক করে দুটি ইউটিলিটি কলব্যাক onDrawingStart()
এবং onDrawingFinish()
প্রদান করে।
FirstDrawListener
এর সম্পূর্ণ কোড এই কোডল্যাবের সোর্স কোডে পাওয়া যাবে।
6. একটি খণ্ডের লোড সময় পরিমাপ করুন
একটি ফ্র্যাগমেন্টের লোড টাইম পরিমাপ করা আমরা একটি কার্যকলাপের জন্য এটিকে কীভাবে পরিমাপ করি তার অনুরূপ কিন্তু কিছু ছোটখাটো পার্থক্য সহ। আবার, আমরা একটি কাস্টম কোড ট্রেস ইনস্ট্রুমেন্ট করব:
-
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");
}
-
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();
}
});
- অ্যাপটি আবার চালান। তারপর, লগক্যাটটিকে " লগিং ট্রেস মেট্রিক " দিয়ে ফিল্টার করুন৷
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 কনসোলের পারফরম্যান্স ড্যাশবোর্ডে অন্যান্য স্ক্রীন রেন্ডারিং ট্রেসের সাথে প্রদর্শিত হতে পারে৷
আপনার ফ্র্যাগমেন্টের জন্য স্ক্রীন ট্রেসগুলি কীভাবে লগ করবেন তা এখানে রয়েছে:
- আপনার কার্যকলাপে
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);
// ...
}
- আপনি যখন আপনার ফ্র্যাগমেন্ট লোড করবেন,
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);
}
};
- অ্যাপটি আবার চালান। তারপরে,
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 কনসোলে মেট্রিক্স চেক করুন
- লগক্যাটে, একটি ট্রেসের জন্য বিশদ পৃষ্ঠা দেখার জন্য Firebase কনসোল URL-এ ক্লিক করুন৷
বিকল্পভাবে, Firebase কনসোলে , আপনার অ্যাপ আছে এমন প্রজেক্ট নির্বাচন করুন। বাম প্যানেলে, রিলিজ এবং মনিটর বিভাগটি সনাক্ত করুন, তারপরে পারফরম্যান্সে ক্লিক করুন।
- প্রধান ড্যাশবোর্ড ট্যাবে, ট্রেস টেবিলে নিচে স্ক্রোল করুন, তারপর কাস্টম ট্রেস ট্যাবে ক্লিক করুন। এই সারণীতে, আপনি কাস্টম কোড ট্রেসগুলি দেখতে পাবেন যা আমরা আগে যোগ করেছি এবং কিছু আউট-অফ-দ্য-বক্স ট্রেস , যেমন
_app_start
ট্রেস। - আপনার দুটি কাস্টম কোড ট্রেস খুঁজুন,
TestActivity-LoadTime
এবংTestFragment-LoadTime
। সংগৃহীত ডেটা সম্পর্কে আরও বিশদ দেখতে যেকোনো একটির জন্য সময়কাল -এ ক্লিক করুন।
- কাস্টম কোড ট্রেসের বিস্তারিত পৃষ্ঠা আপনাকে ট্রেসের সময়কাল সম্পর্কে তথ্য দেখায় (অর্থাৎ, পরিমাপ করা লোড সময়)।
- আপনি আপনার কাস্টম স্ক্রীন ট্রেসের জন্য কর্মক্ষমতা ডেটা দেখতে পারেন।
- মূল ড্যাশবোর্ড ট্যাবে ফিরে যান, ট্রেস টেবিলে নিচে স্ক্রোল করুন, তারপর স্ক্রীন রেন্ডারিং ট্যাবে ক্লিক করুন। এই সারণীতে, আপনি কাস্টম স্ক্রীন ট্রেসগুলি দেখতে পাবেন যা আমরা আগে যুক্ত করেছি এবং যেকোনও বাইরের স্ক্রীন ট্রেসগুলি দেখতে পাবেন, যেমন
MainActivity
ট্রেস৷ - আপনার কাস্টম স্ক্রিন ট্রেস,
MainActivity-TestFragment
খুঁজুন। ধীর রেন্ডারিং এবং হিমায়িত ফ্রেমের সমষ্টিগত ডেটা দেখতে ট্রেস নামের উপর ক্লিক করুন।
10. অভিনন্দন
অভিনন্দন! আপনি ফায়ারবেস পারফরম্যান্স মনিটরিং ব্যবহার করে একটি কার্যকলাপ এবং একটি অংশের লোড টাইম এবং স্ক্রীন রেন্ডারিং পারফরম্যান্স সফলভাবে পরিমাপ করেছেন!
আপনি যা সম্পন্ন করেছেন
- আপনি একটি নমুনা অ্যাপে ফায়ারবেস পারফরম্যান্স মনিটরিং সংহত করেছেন
- আপনি এখন ভিউ লোডিংয়ের জীবনচক্র বুঝতে পেরেছেন
- আপনি কাস্টম কোড ট্রেস যোগ করে একটি কার্যকলাপ এবং একটি খণ্ড উভয়ের লোড সময় পরিমাপ করেছেন
- আপনি কাস্টম মেট্রিক্সের সাথে কাস্টম স্ক্রিন ট্রেস যোগ করে ধীর/হিমায়িত ফ্রেম রেকর্ড করেছেন
এরপর কি
Firebase পারফরম্যান্স কাস্টম ট্রেস ছাড়া আপনার অ্যাপের কর্মক্ষমতা পরিমাপের আরও উপায় প্রদান করে। এটি স্বয়ংক্রিয়ভাবে অ্যাপ শুরুর সময়, অ্যাপ-ইন-ফোরগ্রাউন্ড এবং অ্যাপ-ইন-ব্যাকগ্রাউন্ড পারফরম্যান্স ডেটা পরিমাপ করে। আপনার Firebase কনসোলে এই মেট্রিক্সগুলি পরীক্ষা করার সময় এসেছে৷
এছাড়াও, ফায়ারবেস পারফরম্যান্স স্বয়ংক্রিয় HTTP/S নেটওয়ার্ক অনুরোধ নিরীক্ষণ অফার করে। এটির সাহায্যে আপনি কোডের একটি লাইন না লিখে সহজেই নেটওয়ার্ক অনুরোধগুলিকে উপকরণ করতে পারেন। আপনি কি আপনার অ্যাপ থেকে কিছু নেটওয়ার্ক অনুরোধ পাঠানোর চেষ্টা করতে পারেন এবং Firebase কনসোলে মেট্রিক্স খুঁজে পেতে পারেন?
বোনাস
এখন যেহেতু আপনি কাস্টম কোড ট্রেস ব্যবহার করে আপনার অ্যাক্টিভিটি/ফ্র্যাগমেন্টের লোড টাইম এবং স্ক্রিন রেন্ডারিং পারফরম্যান্স কীভাবে পরিমাপ করতে জানেন, আপনি কি আমাদের ওপেন সোর্সড কোড বেস অন্বেষণ করতে পারেন যে কোনও কার্যকলাপ/খণ্ডের জন্য আপনি সেই মেট্রিকগুলিকে বক্সের বাইরে ক্যাপচার করতে পারেন কিনা। যে অ্যাপের একটি অংশ? আপনি যদি চান তাহলে নির্দ্বিধায় PR পাঠান :-)
11. বোনাস লার্নিং
একটি ক্রিয়াকলাপ লোড করার সময় কী ঘটছে তা বোঝা আপনাকে আপনার অ্যাপের কার্যকারিতা বৈশিষ্ট্যগুলি আরও ভালভাবে বুঝতে সহায়তা করবে৷ একটি পূর্ববর্তী ধাপে, আমরা একটি উচ্চ স্তরে বর্ণনা করেছি যে একটি ক্রিয়াকলাপ লোড করার সময় কী ঘটে, কিন্তু নিম্নলিখিত চিত্রটি প্রতিটি ধাপকে অনেক বেশি বিশদে বর্ণনা করে।
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-এ সংযুক্ত করুন
- অ্যান্ড্রয়েড স্টুডিও / সাহায্যে যান > আপনি Android স্টুডিও এবং ফায়ারবেস সহকারীর সর্বশেষ সংস্করণ ব্যবহার করছেন কিনা তা নিশ্চিত করতে আপডেটগুলি পরীক্ষা করুন ৷
- সহায়ক ফলকটি খুলতে সরঞ্জাম > ফায়ারবেস নির্বাচন করুন।
- আপনার অ্যাপে যোগ করতে পারফরম্যান্স মনিটরিং বেছে নিন, তারপরে পারফরম্যান্স মনিটরিং দিয়ে শুরু করুন ক্লিক করুন।
- Firebase এর সাথে আপনার অ্যান্ড্রয়েড প্রজেক্ট সংযোগ করতে Firebase-এর সাথে Connect-এ ক্লিক করুন (এটি আপনার ব্রাউজারে Firebase কনসোল খুলবে) ।
- Firebase কনসোলে, প্রকল্প যোগ করুন ক্লিক করুন, তারপর একটি Firebase প্রকল্পের নাম লিখুন (যদি আপনার ইতিমধ্যেই একটি Firebase প্রকল্প থাকে, তাহলে আপনি পরিবর্তে সেই বিদ্যমান প্রকল্পটি নির্বাচন করতে পারেন) । Firebase প্রকল্প এবং একটি নতুন Firebase অ্যাপ তৈরি করতে Continue-এ ক্লিক করুন এবং শর্তাবলী স্বীকার করুন।
- আপনার নতুন ফায়ারবেস অ্যাপটিকে আপনার অ্যান্ড্রয়েড স্টুডিও প্রকল্পের সাথে সংযুক্ত করার জন্য আপনাকে পরবর্তীতে একটি ডায়ালগ দেখতে হবে।
- অ্যান্ড্রয়েড স্টুডিও-তে ফিরে এসে, অ্যাসিস্ট্যান্ট প্যানে, আপনার অ্যাপটি Firebase-এর সাথে কানেক্ট করা আছে তা নিশ্চিতকরণ দেখতে হবে।
আপনার অ্যাপে পারফরম্যান্স মনিটরিং যোগ করুন
অ্যান্ড্রয়েড স্টুডিওতে অ্যাসিস্ট্যান্ট প্যানে, আপনার অ্যাপে পারফরম্যান্স মনিটরিং যোগ করুন- এ ক্লিক করুন।
আপনি পরিবর্তনগুলি স্বীকার করার জন্য একটি ডায়ালগ দেখতে পাবেন যার পরে সমস্ত প্রয়োজনীয় নির্ভরতা যোগ করা হয়েছে তা নিশ্চিত করতে অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ সিঙ্ক করবে।
অবশেষে, আপনি Android স্টুডিওতে সহকারী ফলকে সাফল্যের বার্তাটি দেখতে পাবেন যে সমস্ত নির্ভরতা সঠিকভাবে সেট আপ করা হয়েছে।
একটি অতিরিক্ত পদক্ষেপ হিসাবে, "(ঐচ্ছিক) ডিবাগ লগিং সক্ষম করুন" ধাপে নির্দেশাবলী অনুসরণ করে ডিবাগ লগিং সক্ষম করুন৷ একই নির্দেশাবলী পাবলিক ডকুমেন্টেশনেও পাওয়া যায়।
3. অ্যাপটি চালান
আপনি যদি পারফরম্যান্স মনিটরিং SDK-এর সাথে আপনার অ্যাপ সফলভাবে সংহত করে থাকেন, তাহলে প্রকল্পটি এখন কম্পাইল করা উচিত। অ্যান্ড্রয়েড স্টুডিওতে, আপনার সংযুক্ত অ্যান্ড্রয়েড ডিভাইস/এমুলেটরে অ্যাপটি তৈরি করতে এবং চালাতে রান > রান 'অ্যাপ' এ ক্লিক করুন।
অ্যাপটিতে দুটি বোতাম রয়েছে যা আপনাকে একটি সংশ্লিষ্ট কার্যকলাপ এবং খণ্ডে নিয়ে যায়, যেমন:
এই কোডল্যাবের নিম্নলিখিত ধাপে, আপনি শিখবেন কীভাবে আপনার কার্যকলাপ বা খণ্ডের লোড সময় এবং স্ক্রীন রেন্ডারিং কার্যক্ষমতা পরিমাপ করবেন।
4. একটি কার্যকলাপ বা খণ্ডের লোডিং বোঝা
এই ধাপে, আমরা শিখব যে একটি কার্যকলাপ বা ফ্র্যাগমেন্ট লোড করার সময় সিস্টেমটি কী করছে।
একটি কার্যকলাপের লোডিং বোঝা
একটি ক্রিয়াকলাপের জন্য, লোডের সময়কে সংজ্ঞায়িত করা হয় যখন অ্যাক্টিভিটি অবজেক্টটি তৈরি করা হয় তখন থেকে শুরু করে প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা না হওয়া পর্যন্ত ( এটি তখনই যখন আপনার ব্যবহারকারী প্রথমটির জন্য কার্যকলাপের জন্য সম্পূর্ণ UI দেখতে পাবেন সময় )। আপনার অ্যাপটি সম্পূর্ণভাবে আঁকা হয়েছে কিনা তা পরিমাপ করতে, আপনি অ্যাপ্লিকেশন লঞ্চ এবং সমস্ত সংস্থানগুলির সম্পূর্ণ প্রদর্শনের মধ্যে অতিবাহিত সময় পরিমাপ করতে এবং শ্রেণিবিন্যাস দেখতে reportFullyDrawn()
পদ্ধতি ব্যবহার করতে পারেন।
একটি উচ্চ স্তরে, যখন আপনার অ্যাপ startActivity(Intent)
কল করে, সিস্টেম স্বয়ংক্রিয়ভাবে নিম্নলিখিত প্রক্রিয়াগুলি সম্পাদন করে৷ প্রতিটি প্রক্রিয়া সম্পূর্ণ হতে সময় নেয়, যা ক্রিয়াকলাপ তৈরি এবং ব্যবহারকারী যখন তাদের স্ক্রিনে ক্রিয়াকলাপের জন্য UI দেখতে পায় তখন সময়কালকে যোগ করে।
একটি খণ্ডের লোডিং বোঝা
অ্যাক্টিভিটির মতোই একটি ফ্র্যাগমেন্টের লোড টাইমকে সেই সময় হিসাবে সংজ্ঞায়িত করা হয় যখন ফ্র্যাগমেন্টটি তার হোস্ট অ্যাক্টিভিটির সাথে যুক্ত হয় যতক্ষণ না ফ্র্যাগমেন্ট ভিউয়ের প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা হয়।
5. একটি কার্যকলাপের লোড সময় পরিমাপ
প্রথম ফ্রেমে বিলম্বের ফলে ব্যবহারকারীর অভিজ্ঞতা খারাপ হতে পারে, তাই আপনার ব্যবহারকারীরা কতটা প্রাথমিক লোড বিলম্বের সম্মুখীন হচ্ছে তা বোঝা গুরুত্বপূর্ণ। এই লোডের সময় পরিমাপ করতে আপনি একটি কাস্টম কোড ট্রেস করতে পারেন:
- অ্যাক্টিভিটি অবজেক্ট তৈরি হওয়ার সাথে সাথে অ্যাক্টিভিটি ক্লাসে কাস্টম কোড ট্রেস (নাম
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");
// ...
}
-
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);
// ...
}
- আমরা
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();
}
});
- অ্যাপটি আবার চালান। তারপর, লগক্যাটটিকে " লগিং ট্রেস মেট্রিক " দিয়ে ফিল্টার করুন৷
LOAD ACTIVITY
বোতামে আলতো চাপুন এবং নিচের মতো লগগুলি দেখুন:
I/FirebasePerformance: Logging trace metric: TestActivity-LoadTime (duration: XXXms)
🎉 অভিনন্দন! আপনি সফলভাবে একটি কার্যকলাপের লোডিং সময় পরিমাপ করেছেন এবং সেই ডেটা ফায়ারবেস পারফরম্যান্স মনিটরিং-এ রিপোর্ট করেছেন। আমরা এই কোডল্যাবে পরে Firebase কনসোলে রেকর্ড করা মেট্রিক দেখব।
FirstDrawListener এর উদ্দেশ্য
ঠিক উপরের বিভাগে, আমরা একটি FirstDrawListener
নিবন্ধন করেছি। FirstDrawListener
এর উদ্দেশ্য হল প্রথম ফ্রেমটি কখন শুরু হয়েছে এবং অঙ্কন শেষ হয়েছে তা পরিমাপ করা।
এটি ViewTreeObserver.OnDrawListener
প্রয়োগ করে এবং onDraw()
কলব্যাককে ওভাররাইড করে যা ভিউ ট্রি আঁকার সময় আহ্বান করা হয়। এটি তখন ফলাফলটিকে মোড়ক করে দুটি ইউটিলিটি কলব্যাক onDrawingStart()
এবং onDrawingFinish()
প্রদান করে।
FirstDrawListener
এর সম্পূর্ণ কোড এই কোডল্যাবের সোর্স কোডে পাওয়া যাবে।
6. একটি খণ্ডের লোড সময় পরিমাপ করুন
একটি ফ্র্যাগমেন্টের লোড টাইম পরিমাপ করা আমরা একটি কার্যকলাপের জন্য এটিকে কীভাবে পরিমাপ করি তার অনুরূপ কিন্তু কিছু ছোটখাটো পার্থক্য সহ। আবার, আমরা একটি কাস্টম কোড ট্রেস ইনস্ট্রুমেন্ট করব:
-
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");
}
-
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();
}
});
- অ্যাপটি আবার চালান। তারপর, লগক্যাটটিকে " লগিং ট্রেস মেট্রিক " দিয়ে ফিল্টার করুন৷
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 কনসোলের পারফরম্যান্স ড্যাশবোর্ডে অন্যান্য স্ক্রীন রেন্ডারিং ট্রেসের সাথে প্রদর্শিত হতে পারে৷
আপনার ফ্র্যাগমেন্টের জন্য স্ক্রীন ট্রেসগুলি কীভাবে লগ করবেন তা এখানে রয়েছে:
- আপনার কার্যকলাপে
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);
// ...
}
- আপনি যখন আপনার ফ্র্যাগমেন্ট লোড করবেন,
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);
}
};
- অ্যাপটি আবার চালান। তারপরে,
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 কনসোলে মেট্রিক্স চেক করুন
- লগক্যাটে, একটি ট্রেসের জন্য বিশদ পৃষ্ঠা দেখার জন্য Firebase কনসোল URL-এ ক্লিক করুন৷
বিকল্পভাবে, Firebase কনসোলে , আপনার অ্যাপ আছে এমন প্রজেক্ট নির্বাচন করুন। বাম প্যানেলে, রিলিজ এবং মনিটর বিভাগটি সনাক্ত করুন, তারপরে পারফরম্যান্সে ক্লিক করুন।
- প্রধান ড্যাশবোর্ড ট্যাবে, ট্রেস টেবিলে নিচে স্ক্রোল করুন, তারপর কাস্টম ট্রেস ট্যাবে ক্লিক করুন। এই সারণীতে, আপনি কাস্টম কোড ট্রেসগুলি দেখতে পাবেন যা আমরা আগে যোগ করেছি এবং কিছু আউট-অফ-দ্য-বক্স ট্রেস , যেমন
_app_start
ট্রেস। - আপনার দুটি কাস্টম কোড ট্রেস খুঁজুন,
TestActivity-LoadTime
এবংTestFragment-LoadTime
। সংগৃহীত ডেটা সম্পর্কে আরও বিশদ দেখতে যেকোনো একটির জন্য সময়কাল -এ ক্লিক করুন।
- কাস্টম কোড ট্রেসের বিস্তারিত পৃষ্ঠা আপনাকে ট্রেসের সময়কাল সম্পর্কে তথ্য দেখায় (অর্থাৎ, পরিমাপ করা লোড সময়)।
- আপনি আপনার কাস্টম স্ক্রীন ট্রেসের জন্য কর্মক্ষমতা ডেটা দেখতে পারেন।
- মূল ড্যাশবোর্ড ট্যাবে ফিরে যান, ট্রেস টেবিলে নিচে স্ক্রোল করুন, তারপর স্ক্রীন রেন্ডারিং ট্যাবে ক্লিক করুন। এই সারণীতে, আপনি কাস্টম স্ক্রিন ট্রেসগুলি দেখতে পাবেন যা আমরা আগে যুক্ত করেছি এবং যে কোনও বক্সের বাইরে স্ক্রিন ট্রেস যেমন
MainActivity
ট্রেস। - আপনার কাস্টম স্ক্রিন ট্রেস,
MainActivity-TestFragment
সন্ধান করুন। ধীর রেন্ডারিং এবং হিমায়িত ফ্রেমের সংহত ডেটা দেখতে ট্রেসের নামটি ক্লিক করুন।
10। অভিনন্দন
অভিনন্দন! আপনি ফায়ারবেস পারফরম্যান্স মনিটরিং ব্যবহার করে কোনও ক্রিয়াকলাপ এবং একটি খণ্ডের লোড সময় এবং স্ক্রিন রেন্ডারিং পারফরম্যান্স সফলভাবে পরিমাপ করেছেন!
আপনি কি সম্পাদন করেছেন
- আপনি একটি নমুনা অ্যাপে ফায়ারবেস পারফরম্যান্স পর্যবেক্ষণকে সংহত করেছেন
- আপনি এখন ভিউ লোডিংয়ের জীবনচক্র বুঝতে
- আপনি কাস্টম কোড ট্রেস যুক্ত করে কোনও ক্রিয়াকলাপ এবং একটি খণ্ড উভয়ের লোড সময় পরিমাপ করেছেন
- আপনি কাস্টম মেট্রিকগুলির সাথে কাস্টম স্ক্রিন ট্রেস যুক্ত করে ধীর/হিমায়িত ফ্রেম রেকর্ড করেছেন
এরপর কি
ফায়ারবেস পারফরম্যান্স কাস্টম ট্রেস ব্যতীত আপনার অ্যাপ্লিকেশনটির পারফরম্যান্স পরিমাপের আরও বেশি উপায় সরবরাহ করে। এটি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন স্টার্টআপ সময়, অ্যাপ-ইন-ফরগ্রাউন্ড এবং অ্যাপ-ইন-ব্যাকগ্রাউন্ড পারফরম্যান্স ডেটা পরিমাপ করে। আপনার জন্য ফায়ারবেস কনসোলে এই মেট্রিকগুলি পরীক্ষা করার সময় এসেছে।
এছাড়াও, ফায়ারবেস পারফরম্যান্স স্বয়ংক্রিয় এইচটিটিপি/এস নেটওয়ার্ক অনুরোধ পর্যবেক্ষণ সরবরাহ করে। এটির সাহায্যে আপনি কোডের একক লাইন না লিখে সহজেই নেটওয়ার্ক অনুরোধগুলি উপকরণ করতে পারেন। আপনি কি আপনার অ্যাপ্লিকেশন থেকে কিছু নেটওয়ার্ক অনুরোধ প্রেরণের চেষ্টা করতে পারেন এবং ফায়ারবেস কনসোলে মেট্রিকগুলি সন্ধান করতে পারেন?
বোনাস
কাস্টম কোড ট্রেস ব্যবহার করে আপনার ক্রিয়াকলাপ/খণ্ডের লোড সময় এবং স্ক্রিন রেন্ডারিং পারফরম্যান্স কীভাবে পরিমাপ করতে হয় তা এখন আপনি জানেন যে আপনি কোনও ক্রিয়াকলাপ/খণ্ডের জন্য বাক্সের বাইরে এই মেট্রিকগুলি ক্যাপচার করতে পারেন কিনা তা দেখতে আপনি আমাদের উন্মুক্ত সোর্স কোড বেসটি অন্বেষণ করতে পারেন এটি অ্যাপের একটি অংশ? আপনি চাইলে পিআর পাঠাতে নির্দ্বিধায় :-)
11। বোনাস লার্নিং
কোনও ক্রিয়াকলাপ লোড করার সময় কী ঘটছে তা বোঝা আপনাকে আপনার অ্যাপ্লিকেশনটির কার্যকারিতা বৈশিষ্ট্যগুলি আরও ভালভাবে বুঝতে সহায়তা করবে। পূর্ববর্তী পদক্ষেপে, আমরা কোনও ক্রিয়াকলাপের লোডিংয়ের সময় কী ঘটে তা একটি উচ্চ স্তরে বর্ণনা করেছি, তবে নিম্নলিখিত চিত্রটি প্রতিটি পর্বকে অনেক উচ্চতর বিশদে বর্ণনা করে।
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
ফাইল সম্পর্কে একটি সতর্কতা। আমরা এই পদক্ষেপের পরবর্তী বিভাগে এটি সংশোধন করব।
এই কোডল্যাবটিতে, আমরা ফায়ারবেস সহকারী প্লাগইনটি আমাদের অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি একটি ফায়ারবেস প্রকল্পের সাথে নিবন্ধভুক্ত করতে এবং আমাদের অ্যান্ড্রয়েড প্রকল্পে প্রয়োজনীয় ফায়ারবেস কনফিগার ফাইল, প্লাগইন এবং নির্ভরতা যুক্ত করতে ব্যবহার করব - সমস্তই অ্যান্ড্রয়েড স্টুডিওর মধ্যে থেকে !
আপনার অ্যাপ্লিকেশনটি ফায়ারবেসে সংযুক্ত করুন
- অ্যান্ড্রয়েড স্টুডিওতে যান / সহায়তা > আপনি অ্যান্ড্রয়েড স্টুডিও এবং ফায়ারবেস সহকারীটির সর্বশেষ সংস্করণগুলি ব্যবহার করছেন তা নিশ্চিত করার জন্য আপডেটগুলির জন্য চেক করুন ।
- সহকারী ফলকটি খুলতে সরঞ্জাম > ফায়ারবেস নির্বাচন করুন।
- আপনার অ্যাপ্লিকেশনটিতে যুক্ত করতে পারফরম্যান্স মনিটরিং চয়ন করুন, তারপরে পারফরম্যান্স মনিটরিং দিয়ে শুরু করুন ক্লিক করুন।
- আপনার অ্যান্ড্রয়েড প্রকল্পটি ফায়ারবেসের সাথে সংযুক্ত করতে ফায়ারবেসে কানেক্ট ক্লিক করুন (এটি আপনার ব্রাউজারে ফায়ারবেস কনসোলটি খুলবে) ।
- ফায়ারবেস কনসোলে, প্রকল্প যুক্ত করুন ক্লিক করুন, তারপরে একটি ফায়ারবেস প্রকল্পের নাম লিখুন (যদি আপনার ইতিমধ্যে একটি ফায়ারবেস প্রকল্প থাকে তবে আপনি পরিবর্তে সেই বিদ্যমান প্রকল্পটি নির্বাচন করতে পারেন) । ফায়ারবেস প্রকল্প এবং একটি নতুন ফায়ারবেস অ্যাপ্লিকেশন তৈরি করতে শর্তাবলী চালিয়ে যান এবং গ্রহণ করুন ক্লিক করুন।
- আপনার অ্যান্ড্রয়েড স্টুডিও প্রকল্পের সাথে আপনার নতুন ফায়ারবেস অ্যাপটি সংযুক্ত করতে আপনার পরবর্তী একটি ডায়ালগ দেখতে হবে।
- অ্যান্ড্রয়েড স্টুডিওতে ফিরে, সহকারী পেনে, আপনার অ্যাপ্লিকেশনটি ফায়ারবেসের সাথে সংযুক্ত রয়েছে তা নিশ্চিতকরণটি দেখতে হবে।
আপনার অ্যাপ্লিকেশনটিতে পারফরম্যান্স মনিটরিং যুক্ত করুন
অ্যান্ড্রয়েড স্টুডিওতে সহকারী ফলকে, আপনার অ্যাপ্লিকেশনটিতে পারফরম্যান্স মনিটরিং যুক্ত করুন ক্লিক করুন।
সমস্ত প্রয়োজনীয় নির্ভরতা যুক্ত করা হয়েছে তা নিশ্চিত করার জন্য অ্যান্ড্রয়েড স্টুডিওর আপনার অ্যাপ্লিকেশনটি সিঙ্ক করা উচিত তার পরে পরিবর্তনগুলি গ্রহণ করার জন্য আপনার একটি ডায়ালগ দেখতে হবে।
শেষ অবধি, আপনার অ্যান্ড্রয়েড স্টুডিওতে সহকারী পেনে সাফল্যের বার্তাটি দেখতে হবে যে সমস্ত নির্ভরতা সঠিকভাবে সেট আপ করা হয়েছে।
অতিরিক্ত পদক্ষেপ হিসাবে, পদক্ষেপের নির্দেশাবলী অনুসরণ করে ডিবাগ লগিং সক্ষম করুন "(al চ্ছিক) ডিবাগ লগিং সক্ষম করুন"। একই নির্দেশাবলী পাবলিক ডকুমেন্টেশনেও পাওয়া যায়।
3. অ্যাপটি চালান
আপনি যদি পারফরম্যান্স মনিটরিং এসডিকে সফলভাবে আপনার অ্যাপ্লিকেশনটিকে সংহত করে থাকেন তবে প্রকল্পটি এখন সংকলন করা উচিত। অ্যান্ড্রয়েড স্টুডিওতে, আপনার সংযুক্ত অ্যান্ড্রয়েড ডিভাইস/এমুলেটরটিতে অ্যাপটি তৈরি এবং চালানোর জন্য রান > রান 'অ্যাপ্লিকেশন' ক্লিক করুন।
অ্যাপ্লিকেশনটিতে দুটি বোতাম রয়েছে যা আপনাকে সম্পর্কিত ক্রিয়াকলাপ এবং খণ্ডে নিয়ে যায়, এর মতো:
এই কোডল্যাবের নিম্নলিখিত পদক্ষেপগুলিতে, আপনি কীভাবে আপনার ক্রিয়াকলাপ বা খণ্ডের লোড সময় এবং স্ক্রিন রেন্ডারিং পারফরম্যান্স পরিমাপ করবেন তা শিখবেন।
4 .. কোনও ক্রিয়াকলাপ বা খণ্ডের লোডিং বোঝা
এই পদক্ষেপে, আমরা কোনও ক্রিয়াকলাপ বা খণ্ড লোড করার সময় সিস্টেমটি কী করছে তা শিখব।
একটি ক্রিয়াকলাপ লোডিং বোঝা
কোনও ক্রিয়াকলাপের জন্য, লোড সময়টি যখন প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা না হওয়া পর্যন্ত ক্রিয়াকলাপ অবজেক্টটি সমস্ত উপায়ে তৈরি করা হয় তখন থেকে শুরু হওয়ার সময় হিসাবে সংজ্ঞায়িত করা হয় ( এটি যখন আপনার ব্যবহারকারী প্রথমটির জন্য ক্রিয়াকলাপের জন্য সম্পূর্ণ UI দেখতে পাবেন সময় )। আপনার অ্যাপ্লিকেশনটি সম্পূর্ণরূপে আঁকা কিনা তা পরিমাপ করার জন্য, আপনি অ্যাপ্লিকেশন লঞ্চ এবং সমস্ত সংস্থার সম্পূর্ণ প্রদর্শনের মধ্যে এবং শ্রেণিবিন্যাসের সম্পূর্ণ প্রদর্শনের মধ্যে অতিবাহিত সময়টি পরিমাপ করতে reportFullyDrawn()
পদ্ধতিটি ব্যবহার করতে পারেন।
একটি উচ্চ স্তরে, যখন আপনার অ্যাপ্লিকেশনটি startActivity(Intent)
কল করে, সিস্টেমটি স্বয়ংক্রিয়ভাবে নিম্নলিখিত প্রক্রিয়াগুলি সম্পাদন করে। প্রতিটি প্রক্রিয়া শেষ হতে সময় নেয়, যা ক্রিয়াকলাপ তৈরির মধ্যে সময়ের সময়কালকে যুক্ত করে এবং যখন ব্যবহারকারী তাদের স্ক্রিনে ক্রিয়াকলাপের জন্য ইউআইকে দেখেন।
একটি খণ্ড লোডিং বোঝা
ক্রিয়াকলাপের অনুরূপ একটি খণ্ডের জন্য লোড সময়টি যখন খণ্ডটি তার হোস্ট ক্রিয়াকলাপের সাথে সমস্ত উপায়ে সংযুক্ত হয়ে যায় তখন থেকেই খণ্ডটি দেখার জন্য প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা না হওয়া থেকে শুরু থেকে শুরু হওয়ার সময় হিসাবে সংজ্ঞায়িত করা হয়।
5। কোনও ক্রিয়াকলাপের লোড সময় পরিমাপ করুন
প্রথম ফ্রেমে বিলম্বগুলি খারাপ ব্যবহারকারীর অভিজ্ঞতার দিকে পরিচালিত করতে পারে, তাই আপনার ব্যবহারকারীরা কতটা প্রাথমিক লোড বিলম্বের মুখোমুখি হচ্ছে তা বোঝা গুরুত্বপূর্ণ। আপনি এই লোড সময়টি পরিমাপ করতে একটি কাস্টম কোড ট্রেসের সরঞ্জাম করতে পারেন:
- ক্রিয়াকলাপের অবজেক্টটি তৈরি হওয়ার সাথে সাথে ক্রিয়াকলাপ শ্রেণিতে কাস্টম কোড ট্রেস (নামকরণ
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");
// ...
}
-
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);
// ...
}
- আমরা
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();
}
});
- অ্যাপ্লিকেশনটি পুনরায় চালান। তারপরে, " লগিং ট্রেস মেট্রিক " দিয়ে লগক্যাটটি ফিল্টার করুন।
LOAD ACTIVITY
বোতামে আলতো চাপুন এবং নীচের মতো লগগুলি সন্ধান করুন:
I/FirebasePerformance: Logging trace metric: TestActivity-LoadTime (duration: XXXms)
🎉 অভিনন্দন! আপনি কোনও ক্রিয়াকলাপের লোডিং সময়টি সফলভাবে পরিমাপ করেছেন এবং ফায়ারবেস পারফরম্যান্স পর্যবেক্ষণে ডেটা রিপোর্ট করেছেন। আমরা এই কোডল্যাবটিতে পরে ফায়ারবেস কনসোলে রেকর্ড করা মেট্রিকটি দেখব।
ফার্স্টড্রোলিস্টনার উদ্দেশ্য
উপরের বিভাগে, আমরা একটি FirstDrawListener
নিবন্ধভুক্ত করেছি। FirstDrawListener
এর উদ্দেশ্য হ'ল প্রথম ফ্রেমটি যখন অঙ্কন শুরু হয়েছে এবং অঙ্কন শেষ করেছে তখন পরিমাপ করা।
এটি ViewTreeObserver.OnDrawListener
প্রয়োগ করে এবং onDraw()
কলব্যাককে ওভাররাইড করে যা ভিউ ট্রি আঁকতে চলতে চলতে শুরু করা হয়। এরপরে এটি দুটি ইউটিলিটি কলব্যাক onDrawingStart()
এবং onDrawingFinish()
সরবরাহ করার জন্য ফলাফলটি মোড়ানো।
FirstDrawListener
জন্য সম্পূর্ণ কোডটি এই কোডেল্যাবের উত্স কোডে পাওয়া যাবে।
6 .. একটি খণ্ডের লোড সময় পরিমাপ করুন
একটি খণ্ডের লোড সময় পরিমাপ করা কীভাবে আমরা এটি কোনও ক্রিয়াকলাপের জন্য পরিমাপ করি তবে কিছু ছোটখাটো পার্থক্যের সাথে। আবার, আমরা একটি কাস্টম কোড ট্রেসের সরঞ্জাম সরবরাহ করব:
-
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");
}
-
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();
}
});
- অ্যাপ্লিকেশনটি পুনরায় চালান। তারপরে, " লগিং ট্রেস মেট্রিক " দিয়ে লগক্যাটটি ফিল্টার করুন।
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()
: একটি স্ক্রিন ট্রেসের রেকর্ডিং বন্ধ করে দেয় এবং মোট, ধীর এবং হিমায়িত ফ্রেম গণনাগুলিতে লগ করতে কাস্টম মেট্রিকগুলি সংযুক্ত করে
এই কাস্টম মেট্রিকগুলি সংযুক্ত করে, খণ্ডগুলির জন্য স্ক্রিন ট্রেসগুলি কোনও ক্রিয়াকলাপের জন্য স্ক্রিন ট্রেসের মতো একইভাবে পরিচালনা করা যেতে পারে এবং ফায়ারবেস কনসোলের পারফরম্যান্স ড্যাশবোর্ডে অন্যান্য স্ক্রিন রেন্ডারিং ট্রেসগুলির সাথে প্রদর্শিত হতে পারে।
আপনার খণ্ডের জন্য কীভাবে স্ক্রিন ট্রেস লগ করবেন তা এখানে:
- আপনার ক্রিয়াকলাপে
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);
// ...
}
- আপনি যখন আপনার খণ্ডটি লোড করেন,
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);
}
};
- অ্যাপ্লিকেশনটি পুনরায় চালান। তারপরে,
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। ফায়ারবেস কনসোলে মেট্রিকগুলি পরীক্ষা করুন
- লগক্যাটে, ট্রেসের জন্য বিশদ পৃষ্ঠাটি দেখতে ফায়ারবেস কনসোল ইউআরএলটি ক্লিক করুন।
বিকল্পভাবে, ফায়ারবেস কনসোলে , আপনার অ্যাপ্লিকেশন রয়েছে এমন প্রকল্পটি নির্বাচন করুন। বাম প্যানেলে, রিলিজ এবং মনিটর বিভাগটি সনাক্ত করুন, তারপরে পারফরম্যান্স ক্লিক করুন।
- মূল ড্যাশবোর্ড ট্যাবে, ট্রেস টেবিলটিতে নীচে স্ক্রোল করুন, তারপরে কাস্টম ট্রেস ট্যাবে ক্লিক করুন। এই সারণীতে, আপনি কাস্টম কোড ট্রেসগুলি দেখতে পাবেন যা আমরা আগে যুক্ত করেছি এবং কিছু আউট-অফ-বক্স ট্রেস যেমন
_app_start
ট্রেস। - আপনার দুটি কাস্টম কোড ট্রেস,
TestActivity-LoadTime
এবংTestFragment-LoadTime
সন্ধান করুন। সংগৃহীত ডেটা সম্পর্কে আরও বিশদ দেখার জন্য উভয়ের জন্য সময়কালটিতে ক্লিক করুন।
- কাস্টম কোড ট্রেসের বিশদ পৃষ্ঠাটি আপনাকে ট্রেসের সময়কাল (অর্থাত্, পরিমাপকৃত লোড সময়) সম্পর্কে তথ্য দেখায়।
- আপনি আপনার কাস্টম স্ক্রিন ট্রেসের জন্য পারফরম্যান্স ডেটাও দেখতে পারেন।
- মূল ড্যাশবোর্ড ট্যাবে ফিরে যান, ট্রেস টেবিলের নীচে স্ক্রোল করুন, তারপরে স্ক্রিন রেন্ডারিং ট্যাবে ক্লিক করুন। এই সারণীতে, আপনি কাস্টম স্ক্রিন ট্রেসগুলি দেখতে পাবেন যা আমরা আগে যুক্ত করেছি এবং যে কোনও বক্সের বাইরে স্ক্রিন ট্রেস যেমন
MainActivity
ট্রেস। - আপনার কাস্টম স্ক্রিন ট্রেস,
MainActivity-TestFragment
সন্ধান করুন। ধীর রেন্ডারিং এবং হিমায়িত ফ্রেমের সংহত ডেটা দেখতে ট্রেসের নামটি ক্লিক করুন।
10। অভিনন্দন
অভিনন্দন! আপনি ফায়ারবেস পারফরম্যান্স মনিটরিং ব্যবহার করে কোনও ক্রিয়াকলাপ এবং একটি খণ্ডের লোড সময় এবং স্ক্রিন রেন্ডারিং পারফরম্যান্স সফলভাবে পরিমাপ করেছেন!
আপনি কি সম্পাদন করেছেন
- আপনি একটি নমুনা অ্যাপে ফায়ারবেস পারফরম্যান্স পর্যবেক্ষণকে সংহত করেছেন
- আপনি এখন ভিউ লোডিংয়ের জীবনচক্র বুঝতে
- আপনি কাস্টম কোড ট্রেস যুক্ত করে কোনও ক্রিয়াকলাপ এবং একটি খণ্ড উভয়ের লোড সময় পরিমাপ করেছেন
- আপনি কাস্টম মেট্রিকগুলির সাথে কাস্টম স্ক্রিন ট্রেস যুক্ত করে ধীর/হিমায়িত ফ্রেম রেকর্ড করেছেন
এরপর কি
ফায়ারবেস পারফরম্যান্স কাস্টম ট্রেস ব্যতীত আপনার অ্যাপ্লিকেশনটির পারফরম্যান্স পরিমাপের আরও বেশি উপায় সরবরাহ করে। এটি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন স্টার্টআপ সময়, অ্যাপ-ইন-ফরগ্রাউন্ড এবং অ্যাপ-ইন-ব্যাকগ্রাউন্ড পারফরম্যান্স ডেটা পরিমাপ করে। আপনার জন্য ফায়ারবেস কনসোলে এই মেট্রিকগুলি পরীক্ষা করার সময় এসেছে।
এছাড়াও, ফায়ারবেস পারফরম্যান্স স্বয়ংক্রিয় এইচটিটিপি/এস নেটওয়ার্ক অনুরোধ পর্যবেক্ষণ সরবরাহ করে। এটির সাহায্যে আপনি কোডের একক লাইন না লিখে সহজেই নেটওয়ার্ক অনুরোধগুলি উপকরণ করতে পারেন। আপনি কি আপনার অ্যাপ্লিকেশন থেকে কিছু নেটওয়ার্ক অনুরোধ প্রেরণের চেষ্টা করতে পারেন এবং ফায়ারবেস কনসোলে মেট্রিকগুলি সন্ধান করতে পারেন?
বোনাস
কাস্টম কোড ট্রেস ব্যবহার করে আপনার ক্রিয়াকলাপ/খণ্ডের লোড সময় এবং স্ক্রিন রেন্ডারিং পারফরম্যান্স কীভাবে পরিমাপ করতে হয় তা এখন আপনি জানেন যে আপনি কোনও ক্রিয়াকলাপ/খণ্ডের জন্য বাক্সের বাইরে এই মেট্রিকগুলি ক্যাপচার করতে পারেন কিনা তা দেখতে আপনি আমাদের উন্মুক্ত সোর্স কোড বেসটি অন্বেষণ করতে পারেন এটি অ্যাপের একটি অংশ? আপনি চাইলে পিআর পাঠাতে নির্দ্বিধায় :-)
11। বোনাস লার্নিং
কোনও ক্রিয়াকলাপ লোড করার সময় কী ঘটছে তা বোঝা আপনাকে আপনার অ্যাপ্লিকেশনটির কার্যকারিতা বৈশিষ্ট্যগুলি আরও ভালভাবে বুঝতে সহায়তা করবে। পূর্ববর্তী পদক্ষেপে, আমরা কোনও ক্রিয়াকলাপের লোডিংয়ের সময় কী ঘটে তা একটি উচ্চ স্তরে বর্ণনা করেছি, তবে নিম্নলিখিত চিত্রটি প্রতিটি পর্বকে অনেক উচ্চতর বিশদে বর্ণনা করে।
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
ফাইল সম্পর্কে একটি সতর্কতা। আমরা এই পদক্ষেপের পরবর্তী বিভাগে এটি সংশোধন করব।
এই কোডল্যাবটিতে, আমরা ফায়ারবেস সহকারী প্লাগইনটি আমাদের অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি একটি ফায়ারবেস প্রকল্পের সাথে নিবন্ধভুক্ত করতে এবং আমাদের অ্যান্ড্রয়েড প্রকল্পে প্রয়োজনীয় ফায়ারবেস কনফিগার ফাইল, প্লাগইন এবং নির্ভরতা যুক্ত করতে ব্যবহার করব - সমস্তই অ্যান্ড্রয়েড স্টুডিওর মধ্যে থেকে !
আপনার অ্যাপ্লিকেশনটি ফায়ারবেসে সংযুক্ত করুন
- অ্যান্ড্রয়েড স্টুডিওতে যান / সহায়তা > আপনি অ্যান্ড্রয়েড স্টুডিও এবং ফায়ারবেস সহকারীটির সর্বশেষ সংস্করণগুলি ব্যবহার করছেন তা নিশ্চিত করার জন্য আপডেটগুলির জন্য চেক করুন ।
- সহকারী ফলকটি খুলতে সরঞ্জাম > ফায়ারবেস নির্বাচন করুন।
- আপনার অ্যাপ্লিকেশনটিতে যুক্ত করতে পারফরম্যান্স মনিটরিং চয়ন করুন, তারপরে পারফরম্যান্স মনিটরিং দিয়ে শুরু করুন ক্লিক করুন।
- আপনার অ্যান্ড্রয়েড প্রকল্পটি ফায়ারবেসের সাথে সংযুক্ত করতে ফায়ারবেসে কানেক্ট ক্লিক করুন (এটি আপনার ব্রাউজারে ফায়ারবেস কনসোলটি খুলবে) ।
- ফায়ারবেস কনসোলে, প্রকল্প যুক্ত করুন ক্লিক করুন, তারপরে একটি ফায়ারবেস প্রকল্পের নাম লিখুন (যদি আপনার ইতিমধ্যে একটি ফায়ারবেস প্রকল্প থাকে তবে আপনি পরিবর্তে সেই বিদ্যমান প্রকল্পটি নির্বাচন করতে পারেন) । ফায়ারবেস প্রকল্প এবং একটি নতুন ফায়ারবেস অ্যাপ্লিকেশন তৈরি করতে শর্তাবলী চালিয়ে যান এবং গ্রহণ করুন ক্লিক করুন।
- আপনার অ্যান্ড্রয়েড স্টুডিও প্রকল্পের সাথে আপনার নতুন ফায়ারবেস অ্যাপটি সংযুক্ত করতে আপনার পরবর্তী একটি ডায়ালগ দেখতে হবে।
- অ্যান্ড্রয়েড স্টুডিওতে ফিরে, সহকারী পেনে, আপনার অ্যাপ্লিকেশনটি ফায়ারবেসের সাথে সংযুক্ত রয়েছে তা নিশ্চিতকরণটি দেখতে হবে।
আপনার অ্যাপ্লিকেশনটিতে পারফরম্যান্স মনিটরিং যুক্ত করুন
অ্যান্ড্রয়েড স্টুডিওতে সহকারী ফলকে, আপনার অ্যাপ্লিকেশনটিতে পারফরম্যান্স মনিটরিং যুক্ত করুন ক্লিক করুন।
সমস্ত প্রয়োজনীয় নির্ভরতা যুক্ত করা হয়েছে তা নিশ্চিত করার জন্য অ্যান্ড্রয়েড স্টুডিওর আপনার অ্যাপ্লিকেশনটি সিঙ্ক করা উচিত তার পরে পরিবর্তনগুলি গ্রহণ করার জন্য আপনার একটি ডায়ালগ দেখতে হবে।
শেষ অবধি, আপনার অ্যান্ড্রয়েড স্টুডিওতে সহকারী পেনে সাফল্যের বার্তাটি দেখতে হবে যে সমস্ত নির্ভরতা সঠিকভাবে সেট আপ করা হয়েছে।
অতিরিক্ত পদক্ষেপ হিসাবে, পদক্ষেপের নির্দেশাবলী অনুসরণ করে ডিবাগ লগিং সক্ষম করুন "(al চ্ছিক) ডিবাগ লগিং সক্ষম করুন"। একই নির্দেশাবলী পাবলিক ডকুমেন্টেশনেও পাওয়া যায়।
3. অ্যাপটি চালান
আপনি যদি পারফরম্যান্স মনিটরিং এসডিকে সফলভাবে আপনার অ্যাপ্লিকেশনটিকে সংহত করে থাকেন তবে প্রকল্পটি এখন সংকলন করা উচিত। অ্যান্ড্রয়েড স্টুডিওতে, আপনার সংযুক্ত অ্যান্ড্রয়েড ডিভাইস/এমুলেটরটিতে অ্যাপটি তৈরি এবং চালানোর জন্য রান > রান 'অ্যাপ্লিকেশন' ক্লিক করুন।
অ্যাপ্লিকেশনটিতে দুটি বোতাম রয়েছে যা আপনাকে সম্পর্কিত ক্রিয়াকলাপ এবং খণ্ডে নিয়ে যায়, এর মতো:
এই কোডল্যাবের নিম্নলিখিত পদক্ষেপগুলিতে, আপনি কীভাবে আপনার ক্রিয়াকলাপ বা খণ্ডের লোড সময় এবং স্ক্রিন রেন্ডারিং পারফরম্যান্স পরিমাপ করবেন তা শিখবেন।
4 .. কোনও ক্রিয়াকলাপ বা খণ্ডের লোডিং বোঝা
এই পদক্ষেপে, আমরা কোনও ক্রিয়াকলাপ বা খণ্ড লোড করার সময় সিস্টেমটি কী করছে তা শিখব।
একটি ক্রিয়াকলাপ লোডিং বোঝা
কোনও ক্রিয়াকলাপের জন্য, লোড সময়টি যখন প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা না হওয়া পর্যন্ত ক্রিয়াকলাপ অবজেক্টটি সমস্ত উপায়ে তৈরি করা হয় তখন থেকে শুরু হওয়ার সময় হিসাবে সংজ্ঞায়িত করা হয় ( এটি যখন আপনার ব্যবহারকারী প্রথমটির জন্য ক্রিয়াকলাপের জন্য সম্পূর্ণ UI দেখতে পাবেন সময় )। আপনার অ্যাপ্লিকেশনটি সম্পূর্ণরূপে আঁকা কিনা তা পরিমাপ করার জন্য, আপনি অ্যাপ্লিকেশন লঞ্চ এবং সমস্ত সংস্থার সম্পূর্ণ প্রদর্শনের মধ্যে এবং শ্রেণিবিন্যাসের সম্পূর্ণ প্রদর্শনের মধ্যে অতিবাহিত সময়টি পরিমাপ করতে reportFullyDrawn()
পদ্ধতিটি ব্যবহার করতে পারেন।
একটি উচ্চ স্তরে, যখন আপনার অ্যাপ্লিকেশনটি startActivity(Intent)
কল করে, সিস্টেমটি স্বয়ংক্রিয়ভাবে নিম্নলিখিত প্রক্রিয়াগুলি সম্পাদন করে। প্রতিটি প্রক্রিয়া শেষ হতে সময় নেয়, যা ক্রিয়াকলাপ তৈরির মধ্যে সময়ের সময়কালকে যুক্ত করে এবং যখন ব্যবহারকারী তাদের স্ক্রিনে ক্রিয়াকলাপের জন্য ইউআইকে দেখেন।
একটি খণ্ড লোডিং বোঝা
ক্রিয়াকলাপের অনুরূপ একটি খণ্ডের জন্য লোড সময়টি যখন খণ্ডটি তার হোস্ট ক্রিয়াকলাপের সাথে সমস্ত উপায়ে সংযুক্ত হয়ে যায় তখন থেকেই খণ্ডটি দেখার জন্য প্রথম ফ্রেমটি স্ক্রিনে সম্পূর্ণরূপে আঁকা না হওয়া থেকে শুরু থেকে শুরু হওয়ার সময় হিসাবে সংজ্ঞায়িত করা হয়।
5। কোনও ক্রিয়াকলাপের লোড সময় পরিমাপ করুন
প্রথম ফ্রেমে বিলম্বগুলি খারাপ ব্যবহারকারীর অভিজ্ঞতার দিকে পরিচালিত করতে পারে, তাই আপনার ব্যবহারকারীরা কতটা প্রাথমিক লোড বিলম্বের মুখোমুখি হচ্ছে তা বোঝা গুরুত্বপূর্ণ। আপনি এই লোড সময়টি পরিমাপ করতে একটি কাস্টম কোড ট্রেসের সরঞ্জাম করতে পারেন:
- ক্রিয়াকলাপের অবজেক্টটি তৈরি হওয়ার সাথে সাথে ক্রিয়াকলাপ শ্রেণিতে কাস্টম কোড ট্রেস (নামকরণ
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");
// ...
}
-
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);
// ...
}
- আমরা
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();
}
});
- অ্যাপ্লিকেশনটি পুনরায় চালান। তারপরে, " লগিং ট্রেস মেট্রিক " দিয়ে লগক্যাটটি ফিল্টার করুন।
LOAD ACTIVITY
বোতামে আলতো চাপুন এবং নীচের মতো লগগুলি সন্ধান করুন:
I/FirebasePerformance: Logging trace metric: TestActivity-LoadTime (duration: XXXms)
🎉 অভিনন্দন! আপনি কোনও ক্রিয়াকলাপের লোডিং সময়টি সফলভাবে পরিমাপ করেছেন এবং ফায়ারবেস পারফরম্যান্স পর্যবেক্ষণে ডেটা রিপোর্ট করেছেন। আমরা এই কোডল্যাবটিতে পরে ফায়ারবেস কনসোলে রেকর্ড করা মেট্রিকটি দেখব।
ফার্স্টড্রোলিস্টনার উদ্দেশ্য
উপরের বিভাগে, আমরা একটি FirstDrawListener
নিবন্ধভুক্ত করেছি। FirstDrawListener
এর উদ্দেশ্য হ'ল প্রথম ফ্রেমটি যখন অঙ্কন শুরু হয়েছে এবং অঙ্কন শেষ করেছে তখন পরিমাপ করা।
এটি ViewTreeObserver.OnDrawListener
প্রয়োগ করে এবং onDraw()
কলব্যাককে ওভাররাইড করে যা ভিউ ট্রি আঁকতে চলতে চলতে শুরু করা হয়। এরপরে এটি দুটি ইউটিলিটি কলব্যাক onDrawingStart()
এবং onDrawingFinish()
সরবরাহ করার জন্য ফলাফলটি মোড়ানো।
FirstDrawListener
জন্য সম্পূর্ণ কোডটি এই কোডেল্যাবের উত্স কোডে পাওয়া যাবে।
6 .. একটি খণ্ডের লোড সময় পরিমাপ করুন
একটি খণ্ডের লোড সময় পরিমাপ করা কীভাবে আমরা এটি কোনও ক্রিয়াকলাপের জন্য পরিমাপ করি তবে কিছু ছোটখাটো পার্থক্যের সাথে। আবার, আমরা একটি কাস্টম কোড ট্রেসের সরঞ্জাম সরবরাহ করব:
-
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");
}
-
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();
}
});
- অ্যাপ্লিকেশনটি পুনরায় চালান। তারপরে, " লগিং ট্রেস মেট্রিক " দিয়ে লগক্যাটটি ফিল্টার করুন।
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()
: একটি স্ক্রিন ট্রেসের রেকর্ডিং বন্ধ করে দেয় এবং মোট, ধীর এবং হিমায়িত ফ্রেম গণনাগুলিতে লগ করতে কাস্টম মেট্রিকগুলি সংযুক্ত করে
এই কাস্টম মেট্রিকগুলি সংযুক্ত করে, খণ্ডগুলির জন্য স্ক্রিন ট্রেসগুলি কোনও ক্রিয়াকলাপের জন্য স্ক্রিন ট্রেসের মতো একইভাবে পরিচালনা করা যেতে পারে এবং ফায়ারবেস কনসোলের পারফরম্যান্স ড্যাশবোর্ডে অন্যান্য স্ক্রিন রেন্ডারিং ট্রেসগুলির সাথে প্রদর্শিত হতে পারে।
আপনার খণ্ডের জন্য কীভাবে স্ক্রিন ট্রেস লগ করবেন তা এখানে:
- আপনার ক্রিয়াকলাপে
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);
// ...
}
- When you load your Fragment, register for
FragmentLifecycleCallbacks
and override theonFragmentAttached()
andonFragmentDetached()
callbacks. আমরা আপনার জন্য এই কাজ করেছি. You need to start recording screen traces in theonFragmentAttached()
callback and stop recording in theonFragmentDetached()
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);
}
};
- Re-run the app. Then, tap on the
LOAD FRAGMENT
button. Wait for a few seconds, then click theback 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
- In the logcat, click the Firebase console URL to visit the details page for a trace.
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
andTestFragment-LoadTime
. Click on the Duration for either one to view more details about the collected data.
- The detail page for the custom code trace shows you information about the duration of the trace (ie, the measured load time).
- 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.
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
- You integrated Firebase Performance Monitoring into a sample app
- You now understand the life cycle of View loading
- You measured load time of both an Activity and a Fragment by adding custom code traces
- You recorded slow/frozen frames by adding custom screen traces with custom metrics
এরপর কি
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.