blob: cd2202bdf2f47647d932d985f1efa46bdd3b6501 [file] [log] [blame]
// Copyright 2013 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.
// @dart = 2.6
part of engine;
html.HtmlElement _createContainer() {
final html.HtmlElement container = html.DivElement();
container.style
..position = 'fixed'
..top = '0'
..right = '0'
..padding = '6px'
..color = '#fff'
..backgroundColor = '#000'
..opacity = '0.8';
return container;
}
/// An overlay in the top right corner of the page that shows statistics
/// regarding canvas reuse.
///
/// This should only be used for development purposes and never included in
/// release builds.
class DebugCanvasReuseOverlay {
DebugCanvasReuseOverlay._() {
final html.HtmlElement container = _createContainer();
final html.HtmlElement title = html.DivElement();
title.style
..fontWeight = 'bold'
..textDecoration = 'underline';
title.text = 'Canvas Reuse';
html.document.body.append(
container
..append(title)
..append(
html.DivElement()
..appendText('Created: ')
..append(_created),
)
..append(
html.DivElement()
..appendText('Kept: ')
..append(_kept),
)
..append(
html.DivElement()
..appendText('Reused: ')
..append(_reused),
)
..append(
html.DivElement()
..appendText('Disposed: ')
..append(_disposed),
)
..append(
html.DivElement()
..appendText('In Recycle List: ')
..append(_inRecycle),
)
..append(
html.DivElement()
..append(
html.ButtonElement()
..text = 'Reset'
..addEventListener('click', (_) => _reset()),
),
),
);
}
static DebugCanvasReuseOverlay _instance;
static DebugCanvasReuseOverlay get instance {
if (_instance == null) {
// Only call the constructor when assertions are enabled to guard against
// mistakingly including this class in a release build.
if (assertionsEnabled) {
_instance = DebugCanvasReuseOverlay._();
}
}
return _instance;
}
final html.Text _created = html.Text('0');
final html.Text _kept = html.Text('0');
final html.Text _reused = html.Text('0');
final html.Text _disposed = html.Text('0');
final html.Text _inRecycle = html.Text('0');
int _createdCount = 0;
int get createdCount => _createdCount;
set createdCount(int createdCount) {
_createdCount = createdCount;
_update();
}
int _keptCount = 0;
int get keptCount => _keptCount;
set keptCount(int keptCount) {
_keptCount = keptCount;
_update();
}
int _reusedCount = 0;
int get reusedCount => _reusedCount;
set reusedCount(int reusedCount) {
_reusedCount = reusedCount;
_update();
}
int _disposedCount = 0;
int get disposedCount => _disposedCount;
set disposedCount(int disposedCount) {
_disposedCount = disposedCount;
_update();
}
int _inRecycleCount = 0;
int get inRecycleCount => _inRecycleCount;
set inRecycleCount(int inRecycleCount) {
_inRecycleCount = inRecycleCount;
_update();
}
void _update() {
_created.text = '$_createdCount';
_kept.text = '$_keptCount';
_reused.text = '$_reusedCount';
_disposed.text = '$_disposedCount';
_inRecycle.text = '$_inRecycleCount';
}
void _reset() {
_createdCount =
_keptCount = _reusedCount = _disposedCount = _inRecycleCount = 0;
_update();
}
}