Latihan 1: Performance Profiling — Debugging

Latihan 1 dari materi Performance Profiling di Debugging — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Kode awal sudah punya array samples (enam sampel flame chart) dan sembilan baris console.log, biarkan. Lengkapi tiga function. Tiap sampel berbentuk { name, startMs, endMs, parent }; parent berisi name induknya, atau null untuk sampel paling atas.

  1. buildCallTree(samples) mengembalikan array sampel paling atas (yang parent-nya null), masing-masing berbentuk { name, self, total, children }:
    • total = endMs - startMs
    • children = anak langsungnya (sampel yang parent-nya sama dengan name ini), dibentuk dengan cara yang sama
    • self = total dikurangi jumlah total semua anak langsungnya
    • self dan total dibulatkan dengan Math.round
  2. longTasks(samples, threshold) mengembalikan array name dari sampel paling atas yang total-nya lebih dari threshold, diurutkan dari total terbesar.
  3. fpsFromFrames(frameStarts) menerima array cap waktu frame dalam ms dan mengembalikan Math.round(1000 / rata-rata jarak antar frame). Kalau isinya kurang dari 2, kembalikan 0.

Yang dicek, satu per baris di console, urut: 2, task, 60, 5, 2, task, 63, 0, 10.

Ada juga cek dengan data lain: untuk sampel a (0 sampai 80 ms) dan b (80 sampai 100 ms), keduanya paling atas, longTasks dengan threshold 50 harus ["a"] dan dengan threshold 10 harus ["a", "b"]. fpsFromFrames([]) dan fpsFromFrames([5]) harus 0, dan fpsFromFrames([0, 20, 40, 60]) harus 50.

Hint