Unverified Commit abfb889f authored by Jim Graham's avatar Jim Graham Committed by GitHub

Add raster cache metrics to timeline summaries (#89393)

parent 3b3d1950
...@@ -139,6 +139,22 @@ class GalleryTransitionTest { ...@@ -139,6 +139,22 @@ class GalleryTransitionTest {
'worst_frame_rasterizer_time_millis', 'worst_frame_rasterizer_time_millis',
'90th_percentile_frame_rasterizer_time_millis', '90th_percentile_frame_rasterizer_time_millis',
'99th_percentile_frame_rasterizer_time_millis', '99th_percentile_frame_rasterizer_time_millis',
'average_layer_cache_count',
'90th_percentile_layer_cache_count',
'99th_percentile_layer_cache_count',
'worst_layer_cache_count',
'average_layer_cache_memory',
'90th_percentile_layer_cache_memory',
'99th_percentile_layer_cache_memory',
'worst_layer_cache_memory',
'average_picture_cache_count',
'90th_percentile_picture_cache_count',
'99th_percentile_picture_cache_count',
'worst_picture_cache_count',
'average_picture_cache_memory',
'90th_percentile_picture_cache_memory',
'99th_percentile_picture_cache_memory',
'worst_picture_cache_memory',
], ],
); );
} }
......
...@@ -878,6 +878,22 @@ const List<String> _kCommonScoreKeys = <String>[ ...@@ -878,6 +878,22 @@ const List<String> _kCommonScoreKeys = <String>[
'worst_frame_rasterizer_time_millis', 'worst_frame_rasterizer_time_millis',
'90th_percentile_frame_rasterizer_time_millis', '90th_percentile_frame_rasterizer_time_millis',
'99th_percentile_frame_rasterizer_time_millis', '99th_percentile_frame_rasterizer_time_millis',
'average_layer_cache_count',
'90th_percentile_layer_cache_count',
'99th_percentile_layer_cache_count',
'worst_layer_cache_count',
'average_layer_cache_memory',
'90th_percentile_layer_cache_memory',
'99th_percentile_layer_cache_memory',
'worst_layer_cache_memory',
'average_picture_cache_count',
'90th_percentile_picture_cache_count',
'99th_percentile_picture_cache_count',
'worst_picture_cache_count',
'average_picture_cache_memory',
'90th_percentile_picture_cache_memory',
'99th_percentile_picture_cache_memory',
'worst_picture_cache_memory',
'new_gen_gc_count', 'new_gen_gc_count',
'old_gen_gc_count', 'old_gen_gc_count',
]; ];
......
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'percentile_utils.dart';
import 'timeline.dart';
/// Key for RasterCache timeline events.
const String kRasterCacheEvent = 'RasterCache';
const String _kLayerCount = 'LayerCount';
const String _kLayerMemory = 'LayerMBytes';
const String _kPictureCount = 'PictureCount';
const String _kPictureMemory = 'PictureMBytes';
/// Summarizes [TimelineEvents]s corresponding to [kRasterCacheEvent] events.
///
/// A sample event (some fields have been omitted for brevity):
/// ```
/// {
/// "name": "RasterCache",
/// "ts": 75598996256,
/// "ph": "C",
/// "args": {
/// "LayerCount": "1",
/// "LayerMBytes": "0.336491",
/// "PictureCount": "0",
/// "PictureMBytes": "0.000000",
/// }
/// },
/// ```
class RasterCacheSummarizer {
/// Creates a RasterCacheSummarizer given the timeline events.
RasterCacheSummarizer(this.rasterCacheEvents) {
for (final TimelineEvent event in rasterCacheEvents) {
assert(event.name == kRasterCacheEvent);
}
}
/// The raster cache events.
final List<TimelineEvent> rasterCacheEvents;
late final List<double> _layerCounts = _extractValues(_kLayerCount);
late final List<double> _layerMemories = _extractValues(_kLayerMemory);
late final List<double> _pictureCounts = _extractValues(_kPictureCount);
late final List<double> _pictureMemories = _extractValues(_kPictureMemory);
/// Computes the average of the `LayerCount` values over the cache events.
double computeAverageLayerCount() => _computeAverage(_layerCounts);
/// Computes the average of the `LayerMemory` values over the cache events.
double computeAverageLayerMemory() => _computeAverage(_layerMemories);
/// Computes the average of the `PictureCount` values over the cache events.
double computeAveragePictureCount() => _computeAverage(_pictureCounts);
/// Computes the average of the `PictureMemory` values over the cache events.
double computeAveragePictureMemory() => _computeAverage(_pictureMemories);
/// The [percentile]-th percentile `LayerCount` over the cache events.
double computePercentileLayerCount(double percentile) => _computePercentile(_layerCounts, percentile);
/// The [percentile]-th percentile `LayerMemory` over the cache events.
double computePercentileLayerMemory(double percentile) => _computePercentile(_layerMemories, percentile);
/// The [percentile]-th percentile `PictureCount` over the cache events.
double computePercentilePictureCount(double percentile) => _computePercentile(_pictureCounts, percentile);
/// The [percentile]-th percentile `PictureMemory` over the cache events.
double computePercentilePictureMemory(double percentile) => _computePercentile(_pictureMemories, percentile);
/// Computes the worst of the `LayerCount` values over the cache events.
double computeWorstLayerCount() => _computeWorst(_layerCounts);
/// Computes the worst of the `LayerMemory` values over the cache events.
double computeWorstLayerMemory() => _computeWorst(_layerMemories);
/// Computes the worst of the `PictureCount` values over the cache events.
double computeWorstPictureCount() => _computeWorst(_pictureCounts);
/// Computes the worst of the `PictureMemory` values over the cache events.
double computeWorstPictureMemory() => _computeWorst(_pictureMemories);
static double _computeAverage(List<double> values) {
if (values.isEmpty) {
return 0;
}
final double total = values.reduce((double a, double b) => a + b);
return total / values.length;
}
static double _computePercentile(List<double> values, double percentile) {
if (values.isEmpty) {
return 0;
}
return findPercentile(values, percentile);
}
static double _computeWorst(List<double> values) {
if (values.isEmpty) {
return 0;
}
values.sort();
return values.last;
}
List<double> _extractValues(String name) =>
rasterCacheEvents.map((TimelineEvent e) => _getValue(e, name)).toList();
double _getValue(TimelineEvent e, String name) {
assert(e.name == kRasterCacheEvent);
assert(e.arguments!.containsKey(name));
final dynamic valueString = e.arguments![name];
assert(valueString is String);
return double.parse(valueString as String);
}
}
...@@ -11,6 +11,7 @@ import 'package:path/path.dart' as path; ...@@ -11,6 +11,7 @@ import 'package:path/path.dart' as path;
import 'common.dart'; import 'common.dart';
import 'percentile_utils.dart'; import 'percentile_utils.dart';
import 'profiling_summarizer.dart'; import 'profiling_summarizer.dart';
import 'raster_cache_summarizer.dart';
import 'scene_display_lag_summarizer.dart'; import 'scene_display_lag_summarizer.dart';
import 'timeline.dart'; import 'timeline.dart';
import 'vsync_frame_lag_summarizer.dart'; import 'vsync_frame_lag_summarizer.dart';
...@@ -172,10 +173,51 @@ class TimelineSummary { ...@@ -172,10 +173,51 @@ class TimelineSummary {
/// The 90/99-th percentile delay between platform vsync signal and engine /// The 90/99-th percentile delay between platform vsync signal and engine
/// frame process start time. /// frame process start time.
/// See [VsyncFrameLagSummarizer.computePercentileVsyncFrameLag]. /// See [VsyncFrameLagSummarizer.computePercentileVsyncFrameLag].
/// * "average_layer_cache_count": The average of the values seen for the
/// count of the engine layer cache entries.
/// See [RasterCacheSummarizer.computeAverageLayerCount].
/// * "90th_percentile_layer_cache_count" and
/// "99th_percentile_layer_cache_count": The 90/99-th percentile values seen
/// for the count of the engine layer cache entries.
/// See [RasterCacheSummarizer.computePercentileLayerCount].
/// * "worst_layer_cache_count": The worst (highest) value seen for the
/// count of the engine layer cache entries.
/// See [RasterCacheSummarizer.computeWorstLayerCount].
/// * "average_layer_cache_memory": The average of the values seen for the
/// memory used for the engine layer cache entries, in megabytes.
/// See [RasterCacheSummarizer.computeAverageLayerMemory].
/// * "90th_percentile_layer_cache_memory" and
/// "99th_percentile_layer_cache_memory": The 90/99-th percentile values seen
/// for the memory used for the engine layer cache entries.
/// See [RasterCacheSummarizer.computePercentileLayerMemory].
/// * "worst_layer_cache_memory": The worst (highest) value seen for the
/// memory used for the engine layer cache entries.
/// See [RasterCacheSummarizer.computeWorstLayerMemory].
/// * "average_picture_cache_count": The average of the values seen for the
/// count of the engine picture cache entries.
/// See [RasterCacheSummarizer.computeAveragePictureCount].
/// * "90th_percentile_picture_cache_count" and
/// "99th_percentile_picture_cache_count": The 90/99-th percentile values seen
/// for the count of the engine picture cache entries.
/// See [RasterCacheSummarizer.computePercentilePictureCount].
/// * "worst_picture_cache_count": The worst (highest) value seen for the
/// count of the engine picture cache entries.
/// See [RasterCacheSummarizer.computeWorstPictureCount].
/// * "average_picture_cache_memory": The average of the values seen for the
/// memory used for the engine picture cache entries, in megabytes.
/// See [RasterCacheSummarizer.computeAveragePictureMemory].
/// * "90th_percentile_picture_cache_memory" and
/// "99th_percentile_picture_cache_memory": The 90/99-th percentile values seen
/// for the memory used for the engine picture cache entries.
/// See [RasterCacheSummarizer.computePercentilePictureMemory].
/// * "worst_picture_cache_memory": The worst (highest) value seen for the
/// memory used for the engine picture cache entries.
/// See [RasterCacheSummarizer.computeWorstPictureMemory].
Map<String, dynamic> get summaryJson { Map<String, dynamic> get summaryJson {
final SceneDisplayLagSummarizer sceneDisplayLagSummarizer = _sceneDisplayLagSummarizer(); final SceneDisplayLagSummarizer sceneDisplayLagSummarizer = _sceneDisplayLagSummarizer();
final VsyncFrameLagSummarizer vsyncFrameLagSummarizer = _vsyncFrameLagSummarizer(); final VsyncFrameLagSummarizer vsyncFrameLagSummarizer = _vsyncFrameLagSummarizer();
final Map<String, dynamic> profilingSummary = _profilingSummarizer().summarize(); final Map<String, dynamic> profilingSummary = _profilingSummarizer().summarize();
final RasterCacheSummarizer rasterCacheSummarizer = _rasterCacheSummarizer();
final Map<String, dynamic> timelineSummary = <String, dynamic>{ final Map<String, dynamic> timelineSummary = <String, dynamic>{
'average_frame_build_time_millis': computeAverageFrameBuildTimeMillis(), 'average_frame_build_time_millis': computeAverageFrameBuildTimeMillis(),
...@@ -210,6 +252,22 @@ class TimelineSummary { ...@@ -210,6 +252,22 @@ class TimelineSummary {
'average_vsync_frame_lag': vsyncFrameLagSummarizer.computeAverageVsyncFrameLag(), 'average_vsync_frame_lag': vsyncFrameLagSummarizer.computeAverageVsyncFrameLag(),
'90th_percentile_vsync_frame_lag': vsyncFrameLagSummarizer.computePercentileVsyncFrameLag(90.0), '90th_percentile_vsync_frame_lag': vsyncFrameLagSummarizer.computePercentileVsyncFrameLag(90.0),
'99th_percentile_vsync_frame_lag': vsyncFrameLagSummarizer.computePercentileVsyncFrameLag(99.0), '99th_percentile_vsync_frame_lag': vsyncFrameLagSummarizer.computePercentileVsyncFrameLag(99.0),
'average_layer_cache_count': rasterCacheSummarizer.computeAverageLayerCount(),
'90th_percentile_layer_cache_count': rasterCacheSummarizer.computePercentileLayerCount(90.0),
'99th_percentile_layer_cache_count': rasterCacheSummarizer.computePercentileLayerCount(99.0),
'worst_layer_cache_count': rasterCacheSummarizer.computeWorstLayerCount(),
'average_layer_cache_memory': rasterCacheSummarizer.computeAverageLayerMemory(),
'90th_percentile_layer_cache_memory': rasterCacheSummarizer.computePercentileLayerMemory(90.0),
'99th_percentile_layer_cache_memory': rasterCacheSummarizer.computePercentileLayerMemory(99.0),
'worst_layer_cache_memory': rasterCacheSummarizer.computeWorstLayerMemory(),
'average_picture_cache_count': rasterCacheSummarizer.computeAveragePictureCount(),
'90th_percentile_picture_cache_count': rasterCacheSummarizer.computePercentilePictureCount(90.0),
'99th_percentile_picture_cache_count': rasterCacheSummarizer.computePercentilePictureCount(99.0),
'worst_picture_cache_count': rasterCacheSummarizer.computeWorstPictureCount(),
'average_picture_cache_memory': rasterCacheSummarizer.computeAveragePictureMemory(),
'90th_percentile_picture_cache_memory': rasterCacheSummarizer.computePercentilePictureMemory(90.0),
'99th_percentile_picture_cache_memory': rasterCacheSummarizer.computePercentilePictureMemory(99.0),
'worst_picture_cache_memory': rasterCacheSummarizer.computeWorstPictureMemory(),
}; };
timelineSummary.addAll(profilingSummary); timelineSummary.addAll(profilingSummary);
...@@ -372,4 +430,6 @@ class TimelineSummary { ...@@ -372,4 +430,6 @@ class TimelineSummary {
List<Duration> _extractFrameDurations() => _extractBeginEndEvents(kBuildFrameEventName); List<Duration> _extractFrameDurations() => _extractBeginEndEvents(kBuildFrameEventName);
VsyncFrameLagSummarizer _vsyncFrameLagSummarizer() => VsyncFrameLagSummarizer(_extractEventsWithNames(kVsyncTimelineEventNames)); VsyncFrameLagSummarizer _vsyncFrameLagSummarizer() => VsyncFrameLagSummarizer(_extractEventsWithNames(kVsyncTimelineEventNames));
RasterCacheSummarizer _rasterCacheSummarizer() => RasterCacheSummarizer(_extractNamedEvents(kRasterCacheEvent));
} }
...@@ -451,6 +451,22 @@ void main() { ...@@ -451,6 +451,22 @@ void main() {
'average_vsync_frame_lag': 0.0, 'average_vsync_frame_lag': 0.0,
'90th_percentile_vsync_frame_lag': 0.0, '90th_percentile_vsync_frame_lag': 0.0,
'99th_percentile_vsync_frame_lag': 0.0, '99th_percentile_vsync_frame_lag': 0.0,
'average_layer_cache_count': 0.0,
'90th_percentile_layer_cache_count': 0.0,
'99th_percentile_layer_cache_count': 0.0,
'worst_layer_cache_count': 0.0,
'average_layer_cache_memory': 0.0,
'90th_percentile_layer_cache_memory': 0.0,
'99th_percentile_layer_cache_memory': 0.0,
'worst_layer_cache_memory': 0.0,
'average_picture_cache_count': 0.0,
'90th_percentile_picture_cache_count': 0.0,
'99th_percentile_picture_cache_count': 0.0,
'worst_picture_cache_count': 0.0,
'average_picture_cache_memory': 0.0,
'90th_percentile_picture_cache_memory': 0.0,
'99th_percentile_picture_cache_memory': 0.0,
'worst_picture_cache_memory': 0.0,
}, },
); );
}); });
...@@ -550,6 +566,22 @@ void main() { ...@@ -550,6 +566,22 @@ void main() {
'average_memory_usage': 67.5, 'average_memory_usage': 67.5,
'90th_percentile_memory_usage': 75.0, '90th_percentile_memory_usage': 75.0,
'99th_percentile_memory_usage': 75.0, '99th_percentile_memory_usage': 75.0,
'average_layer_cache_count': 0.0,
'90th_percentile_layer_cache_count': 0.0,
'99th_percentile_layer_cache_count': 0.0,
'worst_layer_cache_count': 0.0,
'average_layer_cache_memory': 0.0,
'90th_percentile_layer_cache_memory': 0.0,
'99th_percentile_layer_cache_memory': 0.0,
'worst_layer_cache_memory': 0.0,
'average_picture_cache_count': 0.0,
'90th_percentile_picture_cache_count': 0.0,
'99th_percentile_picture_cache_count': 0.0,
'worst_picture_cache_count': 0.0,
'average_picture_cache_memory': 0.0,
'90th_percentile_picture_cache_memory': 0.0,
'99th_percentile_picture_cache_memory': 0.0,
'worst_picture_cache_memory': 0.0,
}); });
}); });
}); });
......
...@@ -37,9 +37,26 @@ class FrameTimingSummarizer { ...@@ -37,9 +37,26 @@ class FrameTimingSummarizer {
final List<Duration> vsyncOverhead = List<Duration>.unmodifiable( final List<Duration> vsyncOverhead = List<Duration>.unmodifiable(
data.map<Duration>((FrameTiming datum) => datum.vsyncOverhead), data.map<Duration>((FrameTiming datum) => datum.vsyncOverhead),
); );
final List<int> layerCacheCounts = List<int>.unmodifiable(
data.map<int>((FrameTiming datum) => datum.layerCacheCount),
);
final List<int> layerCacheCountsSorted = List<int>.from(layerCacheCounts)..sort();
final List<int> layerCacheBytes = List<int>.unmodifiable(
data.map<int>((FrameTiming datum) => datum.layerCacheBytes),
);
final List<int> layerCacheBytesSorted = List<int>.from(layerCacheBytes)..sort();
final List<int> pictureCacheCounts = List<int>.unmodifiable(
data.map<int>((FrameTiming datum) => datum.pictureCacheCount),
);
final List<int> pictureCacheCountsSorted = List<int>.from(pictureCacheCounts)..sort();
final List<int> pictureCacheBytes = List<int>.unmodifiable(
data.map<int>((FrameTiming datum) => datum.pictureCacheBytes),
);
final List<int> pictureCacheBytesSorted = List<int>.from(pictureCacheBytes)..sort();
final List<Duration> vsyncOverheadSorted = final List<Duration> vsyncOverheadSorted =
List<Duration>.from(vsyncOverhead)..sort(); List<Duration>.from(vsyncOverhead)..sort();
Duration add(Duration a, Duration b) => a + b; Duration add(Duration a, Duration b) => a + b;
int addInts(int a, int b) => a + b;
return FrameTimingSummarizer._( return FrameTimingSummarizer._(
frameBuildTime: frameBuildTime, frameBuildTime: frameBuildTime,
frameRasterizerTime: frameRasterizerTime, frameRasterizerTime: frameRasterizerTime,
...@@ -56,6 +73,22 @@ class FrameTimingSummarizer { ...@@ -56,6 +73,22 @@ class FrameTimingSummarizer {
p90FrameRasterizerTime: _findPercentile(frameRasterizerTimeSorted, 0.90), p90FrameRasterizerTime: _findPercentile(frameRasterizerTimeSorted, 0.90),
p99FrameRasterizerTime: _findPercentile(frameRasterizerTimeSorted, 0.99), p99FrameRasterizerTime: _findPercentile(frameRasterizerTimeSorted, 0.99),
worstFrameRasterizerTime: frameRasterizerTimeSorted.last, worstFrameRasterizerTime: frameRasterizerTimeSorted.last,
averageLayerCacheCount: layerCacheCounts.reduce(addInts) / data.length,
p90LayerCacheCount: _findPercentile(layerCacheCountsSorted, 0.90),
p99LayerCacheCount: _findPercentile(layerCacheCountsSorted, 0.99),
worstLayerCacheCount: layerCacheCountsSorted.last,
averageLayerCacheBytes: layerCacheBytes.reduce(addInts) / data.length,
p90LayerCacheBytes: _findPercentile(layerCacheBytesSorted, 0.90),
p99LayerCacheBytes: _findPercentile(layerCacheBytesSorted, 0.99),
worstLayerCacheBytes: layerCacheBytesSorted.last,
averagePictureCacheCount: pictureCacheCounts.reduce(addInts) / data.length,
p90PictureCacheCount: _findPercentile(pictureCacheCountsSorted, 0.90),
p99PictureCacheCount: _findPercentile(pictureCacheCountsSorted, 0.99),
worstPictureCacheCount: pictureCacheCountsSorted.last,
averagePictureCacheBytes: pictureCacheBytes.reduce(addInts) / data.length,
p90PictureCacheBytes: _findPercentile(pictureCacheBytesSorted, 0.90),
p99PictureCacheBytes: _findPercentile(pictureCacheBytesSorted, 0.99),
worstPictureCacheBytes: pictureCacheBytesSorted.last,
missedFrameRasterizerBudget: missedFrameRasterizerBudget:
_countExceed(frameRasterizerTimeSorted, kBuildBudget), _countExceed(frameRasterizerTimeSorted, kBuildBudget),
averageVsyncOverhead: vsyncOverhead.reduce(add) ~/ data.length, averageVsyncOverhead: vsyncOverhead.reduce(add) ~/ data.length,
...@@ -79,6 +112,22 @@ class FrameTimingSummarizer { ...@@ -79,6 +112,22 @@ class FrameTimingSummarizer {
required this.p90FrameRasterizerTime, required this.p90FrameRasterizerTime,
required this.p99FrameRasterizerTime, required this.p99FrameRasterizerTime,
required this.worstFrameRasterizerTime, required this.worstFrameRasterizerTime,
required this.averageLayerCacheCount,
required this.p90LayerCacheCount,
required this.p99LayerCacheCount,
required this.worstLayerCacheCount,
required this.averageLayerCacheBytes,
required this.p90LayerCacheBytes,
required this.p99LayerCacheBytes,
required this.worstLayerCacheBytes,
required this.averagePictureCacheCount,
required this.p90PictureCacheCount,
required this.p99PictureCacheCount,
required this.worstPictureCacheCount,
required this.averagePictureCacheBytes,
required this.p90PictureCacheBytes,
required this.p99PictureCacheBytes,
required this.worstPictureCacheBytes,
required this.missedFrameRasterizerBudget, required this.missedFrameRasterizerBudget,
required this.vsyncOverhead, required this.vsyncOverhead,
required this.averageVsyncOverhead, required this.averageVsyncOverhead,
...@@ -126,6 +175,54 @@ class FrameTimingSummarizer { ...@@ -126,6 +175,54 @@ class FrameTimingSummarizer {
/// The largest value of [frameRasterizerTime] in milliseconds. /// The largest value of [frameRasterizerTime] in milliseconds.
final Duration worstFrameRasterizerTime; final Duration worstFrameRasterizerTime;
/// The average number of layers cached across all frames.
final double averageLayerCacheCount;
/// The 90-th percentile number of layers cached across all frames.
final int p90LayerCacheCount;
/// The 90-th percentile number of layers cached across all frames.
final int p99LayerCacheCount;
/// The most number of layers cached across all frames.
final int worstLayerCacheCount;
/// The average number of bytes consumed by cached layers across all frames.
final double averageLayerCacheBytes;
/// The 90-th percentile number of bytes consumed by cached layers across all frames.
final int p90LayerCacheBytes;
/// The 90-th percentile number of bytes consumed by cached layers across all frames.
final int p99LayerCacheBytes;
/// The highest number of bytes consumed by cached layers across all frames.
final int worstLayerCacheBytes;
/// The average number of pictures cached across all frames.
final double averagePictureCacheCount;
/// The 90-th percentile number of pictures cached across all frames.
final int p90PictureCacheCount;
/// The 90-th percentile number of pictures cached across all frames.
final int p99PictureCacheCount;
/// The most number of pictures cached across all frames.
final int worstPictureCacheCount;
/// The average number of bytes consumed by cached pictures across all frames.
final double averagePictureCacheBytes;
/// The 90-th percentile number of bytes consumed by cached pictures across all frames.
final int p90PictureCacheBytes;
/// The 90-th percentile number of bytes consumed by cached pictures across all frames.
final int p99PictureCacheBytes;
/// The highest number of bytes consumed by cached pictures across all frames.
final int worstPictureCacheBytes;
/// Number of items in [frameRasterizerTime] that's greater than [kBuildBudget] /// Number of items in [frameRasterizerTime] that's greater than [kBuildBudget]
final int missedFrameRasterizerBudget; final int missedFrameRasterizerBudget;
...@@ -168,6 +265,22 @@ class FrameTimingSummarizer { ...@@ -168,6 +265,22 @@ class FrameTimingSummarizer {
p99FrameRasterizerTime.inMicroseconds / 1E3, p99FrameRasterizerTime.inMicroseconds / 1E3,
'worst_frame_rasterizer_time_millis': 'worst_frame_rasterizer_time_millis':
worstFrameRasterizerTime.inMicroseconds / 1E3, worstFrameRasterizerTime.inMicroseconds / 1E3,
'average_layer_cache_count': averageLayerCacheCount,
'90th_percentile_layer_cache_count': p90LayerCacheCount,
'99th_percentile_layer_cache_count': p99LayerCacheCount,
'worst_layer_cache_count': worstLayerCacheCount,
'average_layer_cache_memory': averageLayerCacheBytes / 1024.0 / 1024.0,
'90th_percentile_layer_cache_memory': p90LayerCacheBytes / 1024.0 / 1024.0,
'99th_percentile_layer_cache_memory': p99LayerCacheBytes / 1024.0 / 1024.0,
'worst_layer_cache_memory': worstLayerCacheBytes / 1024.0 / 1024.0,
'average_picture_cache_count': averagePictureCacheCount,
'90th_percentile_picture_cache_count': p90PictureCacheCount,
'99th_percentile_picture_cache_count': p99PictureCacheCount,
'worst_picture_cache_count': worstPictureCacheCount,
'average_picture_cache_memory': averagePictureCacheBytes / 1024.0 / 1024.0,
'90th_percentile_picture_cache_memory': p90PictureCacheBytes / 1024.0 / 1024.0,
'99th_percentile_picture_cache_memory': p99PictureCacheBytes / 1024.0 / 1024.0,
'worst_picture_cache_memory': worstPictureCacheBytes / 1024.0 / 1024.0,
'missed_frame_rasterizer_budget_count': missedFrameRasterizerBudget, 'missed_frame_rasterizer_budget_count': missedFrameRasterizerBudget,
'frame_count': frameBuildTime.length, 'frame_count': frameBuildTime.length,
'frame_build_times': frameBuildTime 'frame_build_times': frameBuildTime
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment