// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview ProfilingView visualizes GPU_TRACE events using the
* gpu.Timeline component.
*/
cr.define('gpu', function() {
/**
* ProfilingView
* @constructor
* @extends {gpu.Tab}
*/
ProfilingView = cr.ui.define(gpu.Tab);
ProfilingView.prototype = {
__proto__: gpu.Tab.prototype,
traceEvents_: [],
decorate: function() {
// make the <list>/add/save/record element
this.controlDiv_ = document.createElement('div');
this.controlDiv_.className = 'control';
this.appendChild(this.controlDiv_);
this.recordBn_ = document.createElement('button');
this.recordBn_.textContent = 'Record';
this.recordBn_.addEventListener('click', this.onRecord_.bind(this));
this.saveBn_ = document.createElement('button');
this.saveBn_.textContent = 'Save';
this.saveBn_.addEventListener('click', this.onSave_.bind(this));
this.loadBn_ = document.createElement('button');
this.loadBn_.textContent = 'Load';
this.loadBn_.addEventListener('click', this.onLoad_.bind(this));
this.container_ = document.createElement('div');
this.container_.className = 'container';
this.timelineView_ = new TimelineView();
this.controlDiv_.appendChild(this.recordBn_);
if (!browserBridge.debugMode) {
this.controlDiv_.appendChild(this.loadBn_);
this.controlDiv_.appendChild(this.saveBn_);
}
this.container_.appendChild(this.timelineView_);
this.appendChild(this.container_);
tracingController.addEventListener('traceEnded',
this.onRecordDone_.bind(this));
tracingController.addEventListener('loadTraceFileComplete',
this.onLoadTraceFileComplete_.bind(this));
tracingController.addEventListener('saveTraceFileComplete',
this.onSaveTraceFileComplete_.bind(this));
tracingController.addEventListener('loadTraceFileCanceled',
this.onLoadTraceFileCanceled_.bind(this));
tracingController.addEventListener('saveTraceFileCanceled',
this.onSaveTraceFileCanceled_.bind(this));
this.refresh_();
},
refresh_: function() {
var hasEvents = this.traceEvents_ && this.traceEvents_.length;
this.saveBn_.disabled = !hasEvents;
this.timelineView_.traceEvents = this.traceEvents_;
},
///////////////////////////////////////////////////////////////////////////
onRecord_: function() {
tracingController.beginTracing();
},
onRecordDone_: function() {
this.traceEvents_ = tracingController.traceEvents;
this.refresh_();
},
///////////////////////////////////////////////////////////////////////////
onSave_: function() {
this.overlayEl_ = new gpu.Overlay();
this.overlayEl_.className = 'profiling-overlay';
var labelEl = document.createElement('div');
labelEl.className = 'label';
labelEl.textContent = 'Saving...';
this.overlayEl_.appendChild(labelEl);
this.overlayEl_.visible = true;
tracingController.beginSaveTraceFile(this.traceEvents_);
},
onSaveTraceFileComplete_: function(e) {
this.overlayEl_.visible = false;
this.overlayEl_ = undefined;
},
onSaveTraceFileCanceled_: function(e) {
this.overlayEl_.visible = false;
this.overlayEl_ = undefined;
},
///////////////////////////////////////////////////////////////////////////
onLoad_: function() {
this.overlayEl_ = new gpu.Overlay();
this.overlayEl_.className = 'profiling-overlay';
var labelEl = document.createElement('div');
labelEl.className = 'label';
labelEl.textContent = 'Loading...';
this.overlayEl_.appendChild(labelEl);
this.overlayEl_.visible = true;
tracingController.beginLoadTraceFile();
},
onLoadTraceFileComplete_: function(e) {
this.overlayEl_.visible = false;
this.overlayEl_ = undefined;
this.traceEvents_ = e.events;
this.refresh_();
},
onLoadTraceFileCanceled_: function(e) {
this.overlayEl_.visible = false;
this.overlayEl_ = undefined;
}
};
return {
ProfilingView: ProfilingView
};
});