1/**
2 * @constructor
3 * @extends {WebInspector.SDKModel}
4 * @param {!WebInspector.Target} target
5 */
6WebInspector.HeapProfilerModel = function(target)
7{
8    WebInspector.SDKModel.call(this, WebInspector.HeapProfilerModel, target);
9    target.registerHeapProfilerDispatcher(new WebInspector.HeapProfilerDispatcher(this));
10    this._enabled = false;
11    this._heapProfilerAgent = target.heapProfilerAgent();
12}
13
14WebInspector.HeapProfilerModel.Events = {
15    HeapStatsUpdate: "HeapStatsUpdate",
16    LastSeenObjectId: "LastSeenObjectId",
17    AddHeapSnapshotChunk: "AddHeapSnapshotChunk",
18    ReportHeapSnapshotProgress: "ReportHeapSnapshotProgress",
19    ResetProfiles: "ResetProfiles"
20}
21
22WebInspector.HeapProfilerModel.prototype = {
23
24    enable: function()
25    {
26        if (this._enabled)
27            return;
28
29        this._enabled = true;
30        this._heapProfilerAgent.enable();
31    },
32
33    /**
34     * @param {!Array.<number>} samples
35     */
36    heapStatsUpdate: function(samples)
37    {
38        this.dispatchEventToListeners(WebInspector.HeapProfilerModel.Events.HeapStatsUpdate, samples);
39    },
40
41    /**
42     * @param {number} lastSeenObjectId
43     * @param {number} timestamp
44     */
45    lastSeenObjectId: function(lastSeenObjectId, timestamp)
46    {
47        this.dispatchEventToListeners(WebInspector.HeapProfilerModel.Events.LastSeenObjectId ,{lastSeenObjectId: lastSeenObjectId, timestamp: timestamp});
48    },
49
50    /**
51     * @param {string} chunk
52     */
53    addHeapSnapshotChunk: function(chunk)
54    {
55        this.dispatchEventToListeners(WebInspector.HeapProfilerModel.Events.AddHeapSnapshotChunk, chunk);
56    },
57
58    /**
59     * @param {number} done
60     * @param {number} total
61     * @param {boolean=} finished
62     */
63    reportHeapSnapshotProgress: function(done, total, finished)
64    {
65        this.dispatchEventToListeners(WebInspector.HeapProfilerModel.Events.ReportHeapSnapshotProgress, {done: done, total: total, finished: finished});
66    },
67
68    resetProfiles: function()
69    {
70        this.dispatchEventToListeners(WebInspector.HeapProfilerModel.Events.ResetProfiles);
71    },
72
73    __proto__: WebInspector.SDKModel.prototype
74}
75
76
77/**
78 * @constructor
79 * @implements {HeapProfilerAgent.Dispatcher}
80 */
81WebInspector.HeapProfilerDispatcher = function(model)
82{
83    this._heapProfilerModel = model;
84}
85
86WebInspector.HeapProfilerDispatcher.prototype = {
87
88    /**
89     * @param {!Array.<number>} samples
90     */
91    heapStatsUpdate: function(samples)
92    {
93        this._heapProfilerModel.heapStatsUpdate(samples);
94    },
95
96    /**
97     * @param {number} lastSeenObjectId
98     * @param {number} timestamp
99     */
100    lastSeenObjectId: function(lastSeenObjectId, timestamp)
101    {
102        this._heapProfilerModel.lastSeenObjectId(lastSeenObjectId, timestamp);
103    },
104
105    /**
106     * @param {string} chunk
107     */
108    addHeapSnapshotChunk: function(chunk)
109    {
110        this._heapProfilerModel.addHeapSnapshotChunk(chunk);
111    },
112
113    /**
114     * @param {number} done
115     * @param {number} total
116     * @param {boolean=} finished
117     */
118    reportHeapSnapshotProgress: function(done, total, finished)
119    {
120        this._heapProfilerModel.reportHeapSnapshotProgress(done, total, finished);
121    },
122
123    resetProfiles: function()
124    {
125        this._heapProfilerModel.resetProfiles();
126    }
127}