الملفات الشخصية الأساسية المرجعية باستخدام مكتبة مقاييس الأداء المجمّعة

ننصح باستخدام Jetpack Macrobenchmark لاختبار أداء التطبيق عند تفعيل "ملفات تعريف الخط الأساس"، ثم مقارنة هذه النتائج بمقياس أداء مع إيقاف "ملفات تعريف الخط الأساس". باستخدام هذا الأسلوب، يمكنك قياس وقت بدء تشغيل التطبيق، أي الوقت اللازم لعرض الشاشة الأولية والشاشة الكاملة، أو أداء العرض أثناء وقت التشغيل لمعرفة ما إذا كان بإمكان اللقطات التي تم إنتاجها أن تتسبّب في حدوث تشوّش.

تتيح لك اختبارات الأداء الشامل التحكّم في عملية التجميع المسبق للقياس باستخدام واجهة برمجة التطبيقات CompilationMode. استخدِم قيم CompilationMode مختلفة لمقارنة الأداء مع حالات تجميع مختلفة. يوضّح مقتطف الرمز التالي كيفية استخدام المَعلمة CompilationMode لقياس فائدة "ملفات تعريف خط الأساس":

@RunWith(AndroidJUnit4ClassRunner::class)
class ColdStartupBenchmark {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    // No ahead-of-time (AOT) compilation at all. Represents performance of a
    // fresh install on a user's device if you don't enable Baseline Profiles—
    // generally the worst case performance.
    @Test
    fun startupNoCompilation() = startup(CompilationMode.None())

    // Partial pre-compilation with Baseline Profiles. Represents performance of
    // a fresh install on a user's device.
    @Test
    fun startupPartialWithBaselineProfiles() =
        startup(CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require))

    // Partial pre-compilation with some just-in-time (JIT) compilation.
    // Represents performance after some app usage.
    @Test
    fun startupPartialCompilation() = startup(
        CompilationMode.Partial(
            baselineProfileMode = BaselineProfileMode.Disable,
            warmupIteration = 3
        )
    )

    // Full pre-compilation. Generally not representative of real user
    // experience, but can yield more stable performance metrics by removing
    // noise from JIT compilation within benchmark runs.
    @Test
    fun startupFullCompilation() = startup(CompilationMode.Full())

    private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated(
        packageName = "com.example.macrobenchmark.target",
        metrics = listOf(StartupTimingMetric()),
        compilationMode = compilationMode,
        iterations = 10,
        startupMode = StartupMode.COLD,
        setupBlock = {
            pressHome()
        }
    ) {
        // Waits for the first rendered frame, which represents time to initial display.
        startActivityAndWait()

        // Waits for content to be visible, which represents time to fully drawn.
        device.wait(Until.hasObject(By.res("my-content")), 5_000)
    }
}

في لقطة الشاشة التالية، يمكنك الاطّلاع على النتائج مباشرةً في "استوديو Android" لتطبيق نموذج Now in Android الذي تم تشغيله على هاتف Google Pixel 7. توضّح النتائج أنّ بدء تشغيل التطبيق يكون أسرع عند استخدام "ملفات Baseline"‏ (229.0 ملي ثانية) مقارنةً بعدم إجراء أي عملية تجميع (324.8 ملي ثانية).

نتائج ColdstartupBenchmark
الشكل 1. نتائج ColdStartupBenchmark عرض وقت العرض الأوّلي بدون تجميع (324 ملي ثانية)، والتجميع الكامل (315 ملي ثانية)، والتجميع الجزئي (312 ملي ثانية)، وملفات Baseline Profiles (229 ملي ثانية).

في حين يعرض المثال السابق نتائج بدء تشغيل التطبيق التي تم تسجيلها باستخدام StartupTimingMetric، هناك مقاييس مهمة أخرى يجب أخذها في الاعتبار، مثل FrameTimingMetric. لمزيد من المعلومات عن جميع أنواع المقاييس، يُرجى الاطّلاع على تسجيل مقاييس Macrobenchmark.

الوقت اللازم للعرض بملء الشاشة

يقيس المثال السابق الوقت المستغرَق للعرض الأولي (TTID)، وهو الوقت الذي يستغرقه التطبيق لإنتاج إطاره الأول. ومع ذلك، لا يعكس هذا المقياس بالضرورة الوقت الذي يمكن للمستخدم أن يبدأ فيه التفاعل مع تطبيقك، بل إنّ مقياس وقت العرض الكامل (TTFD) أكثر فائدة في قياس مسارات الرموز اللازمة للوصول إلى حالة تطبيق قابلة للاستخدام بالكامل وتحسينها.

ننصحك بتحسين كلّ من TTID وTTFD، لأنّ كليهما مهمّان. يساعد وقت الاستجابة المنخفض TTID المستخدم في التأكّد من أنّ التطبيق يتم تشغيله بالفعل. من المهم الحفاظ على قيمة TTFD منخفضة لضمان تفاعل المستخدم مع التطبيق بسرعة.

للاطّلاع على استراتيجيات حول إعداد التقارير عند اكتمال عرض واجهة مستخدم التطبيق، يُرجى الاطّلاع على تحسين دقة توقيت بدء التشغيل.

  • ملاحظة: يتم عرض نص الرابط عندما تكون JavaScript غير مفعّلة
  • [كتابة اختبار Macrobenchmark][11]
  • [تسجيل مقاييس Macrobenchmark][12]
  • [تحليل عملية بدء تشغيل التطبيق وتحسينها {:#app-startup-analysis-optimization}][13]