Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / tools / memory_inspector / memory_inspector / frontends / www_content / js / storage.js
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 storage = new (function() {
6
7 this.table_ = null;
8 this.tableData_ = null;
9
10 this.onDomReady_ = function() {
11   // Initialize the toolbar.
12   $('#storage-profile-mmaps').button({icons:{primary: 'ui-icon-image'}})
13       .click(this.profileMmapForSelectedSnapshots.bind(this));
14   $('#storage-dump-mmaps').button({icons:{primary: 'ui-icon-calculator'}})
15       .click(this.dumpMmapForSelectedSnapshot_.bind(this));
16   $('#storage-profile-native').button({icons:{primary: 'ui-icon-image'}})
17       .click(this.profileNativeForSelectedSnapshots.bind(this));
18   $('#storage-dump-nheap').button({icons:{primary: 'ui-icon-calculator'}})
19       .click(this.dumpNheapForSelectedSnapshot_.bind(this));
20
21   // Create the table.
22   this.table_ = new google.visualization.Table($('#storage-table')[0]);
23 };
24
25 this.reload = function() {
26   webservice.ajaxRequest('/storage/list', this.onListAjaxResponse_.bind(this));
27 }
28
29 this.onListAjaxResponse_ = function(data) {
30   this.tableData_ = new google.visualization.DataTable(data);
31   this.redraw();
32 };
33
34 this.profileMmapForSelectedSnapshots = function() {
35   // Generates a mmap profile for the selected snapshots.
36   var sel = this.table_.getSelection();
37   if (!sel.length || !this.tableData_)
38     return;
39   var archiveName = null;
40   var snapshots = [];
41
42   for (var i = 0; i < sel.length; ++i) {
43     var row = sel[i].row;
44     var curArchive = this.tableData_.getValue(row, 0);
45     if (archiveName && curArchive != archiveName){
46       alert('All the selected snapshots must belong to the same archive!');
47       return;
48     }
49     archiveName = curArchive;
50     snapshots.push(this.tableData_.getValue(row, 1));
51   }
52   profiler.profileArchivedMmaps(archiveName, snapshots);
53   rootUi.showTab('prof');
54 };
55
56 this.dumpMmapForSelectedSnapshot_ = function() {
57   var sel = this.table_.getSelection();
58   if (sel.length != 1) {
59     alert('Please select only one snapshot.')
60     return;
61   }
62
63   var row = sel[0].row;
64   mmap.dumpMmapsFromStorage(this.tableData_.getValue(row, 0),
65                             this.tableData_.getValue(row, 1))
66   rootUi.showTab('mm');
67 };
68
69 this.dumpNheapForSelectedSnapshot_ = function() {
70   var sel = this.table_.getSelection();
71   if (sel.length != 1) {
72     alert('Please select only one snapshot.')
73     return;
74   }
75
76   var row = sel[0].row;
77   if (!this.checkHasNativeHapDump_(row))
78     return;
79   nheap.dumpNheapFromStorage(this.tableData_.getValue(row, 0),
80                              this.tableData_.getValue(row, 1))
81   rootUi.showTab('nheap');
82 };
83
84 this.profileNativeForSelectedSnapshots = function() {
85   // Generates a native heap profile for the selected snapshots.
86   var sel = this.table_.getSelection();
87   if (!sel.length || !this.tableData_)
88     return;
89   var archiveName = null;
90   var snapshots = [];
91
92   for (var i = 0; i < sel.length; ++i) {
93     var row = sel[i].row;
94     var curArchive = this.tableData_.getValue(row, 0);
95     if (archiveName && curArchive != archiveName) {
96       alert('All the selected snapshots must belong to the same archive!');
97       return;
98     }
99     if (!this.checkHasNativeHapDump_(row))
100       return;
101     archiveName = curArchive;
102     snapshots.push(this.tableData_.getValue(row, 1));
103   }
104   profiler.profileArchivedNHeaps(archiveName, snapshots);
105   rootUi.showTab('prof');
106 };
107
108 this.checkHasNativeHapDump_ = function(row) {
109   if (!this.tableData_.getValue(row, 3)) {
110     alert('The selected snapshot doesn\'t have a heap dump!');
111     return false;
112   }
113   return true;
114 }
115
116 this.redraw = function() {
117   if (!this.tableData_)
118     return;
119   this.table_.draw(this.tableData_);
120 };
121
122 $(document).ready(this.onDomReady_.bind(this));
123
124 })();