Source/WebCore/ChangeLog

 12012-08-03 Sergey Rogulenko <rogulenko@google.com>
 2
 3 Web Inspector: added Paint events for Images to TimelineAgent
 4 https://bugs.webkit.org/show_bug.cgi?id=90277
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 This patch adds Image Decode and Image Resize events to Timeline.
 9
 10 Test: inspector/timeline/timeline-decode-resize.html
 11
 12 * English.lproj/localizedStrings.js:
 13 * inspector/InspectorInstrumentation.cpp:
 14 (WebCore):
 15 (WebCore::InspectorInstrumentation::willDecodeImageImpl):
 16 (WebCore::InspectorInstrumentation::didDecodeImageImpl):
 17 (WebCore::InspectorInstrumentation::willResizeImageImpl):
 18 (WebCore::InspectorInstrumentation::didResizeImageImpl):
 19 * inspector/InspectorInstrumentation.h:
 20 (InspectorInstrumentation):
 21 (WebCore::InspectorInstrumentation::willDecodeImage):
 22 (WebCore):
 23 (WebCore::InspectorInstrumentation::didDecodeImage):
 24 (WebCore::InspectorInstrumentation::willResizeImage):
 25 (WebCore::InspectorInstrumentation::didResizeImage):
 26 * inspector/InspectorTimelineAgent.cpp:
 27 (TimelineRecordType):
 28 (WebCore::InspectorTimelineAgent::willDecodeImage):
 29 (WebCore):
 30 (WebCore::InspectorTimelineAgent::didDecodeImage):
 31 (WebCore::InspectorTimelineAgent::willResizeImage):
 32 (WebCore::InspectorTimelineAgent::didResizeImage):
 33 * inspector/InspectorTimelineAgent.h:
 34 (InspectorTimelineAgent):
 35 * inspector/TimelineRecordFactory.cpp:
 36 (WebCore::TimelineRecordFactory::createDecodeImageData):
 37 (WebCore):
 38 (WebCore::TimelineRecordFactory::createResizeImageData):
 39 * inspector/TimelineRecordFactory.h:
 40 (TimelineRecordFactory):
 41 * inspector/front-end/TimelineModel.js:
 42 * inspector/front-end/TimelinePresentationModel.js:
 43 (WebInspector.TimelinePresentationModel.initRecordStyles_):
 44 (WebInspector.TimelinePresentationModel.Record.prototype._getRecordDetails):
 45 * platform/graphics/skia/NativeImageSkia.cpp:
 46 (WebCore::NativeImageSkia::resizedBitmap):
 47 * platform/image-decoders/bmp/BMPImageDecoder.cpp:
 48 (WebCore::BMPImageDecoder::frameBufferAtIndex):
 49 * platform/image-decoders/gif/GIFImageDecoder.cpp:
 50 (WebCore::GIFImageDecoder::frameBufferAtIndex):
 51 * platform/image-decoders/ico/ICOImageDecoder.cpp:
 52 (WebCore::ICOImageDecoder::frameBufferAtIndex):
 53 * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
 54 (WebCore::JPEGImageDecoder::frameBufferAtIndex):
 55 * platform/image-decoders/png/PNGImageDecoder.cpp:
 56 (WebCore::PNGImageDecoder::frameBufferAtIndex):
 57 * platform/image-decoders/webp/WEBPImageDecoder.cpp:
 58 (WebCore::WEBPImageDecoder::frameBufferAtIndex):
 59
1602012-08-03 Sergio Carlos Morales Angeles <carloschilazo@gmail.com>
261
362 Delete text from password does nothing.

Source/WebCore/English.lproj/localizedStrings.js

@@localizedStrings["Open link in Resources panel"] = "Open link in Resources panel
296296localizedStrings["Other"] = "Other";
297297localizedStrings["Device metrics"] = "Device metrics";
298298localizedStrings["Paint"] = "Paint";
 299localizedStrings["Image Decode"] = "Image Decode";
 300localizedStrings["Image Resize"] = "Image Resize";
 301localizedStrings["cached"] = "cached";
 302localizedStrings["non-cached"] = "non-cached";
299303localizedStrings["Parse"] = "Parse";
300304localizedStrings["Parser"] = "Parser";
301305localizedStrings["Path"] = "Path";

Source/WebCore/inspector/InspectorInstrumentation.cpp

@@void InspectorInstrumentation::didPaintImpl(const InspectorInstrumentationCookie
478478 pageAgent->didPaint();
479479}
480480
 481void InspectorInstrumentation::willDecodeImageImpl(const String& imageType)
 482{
 483 if (InspectorTimelineAgent* timelineAgent = timelineAgentForOrphanEvents())
 484 timelineAgent->willDecodeImage(imageType);
 485}
 486
 487void InspectorInstrumentation::didDecodeImageImpl()
 488{
 489 if (InspectorTimelineAgent* timelineAgent = timelineAgentForOrphanEvents())
 490 timelineAgent->didDecodeImage();
 491}
 492
 493void InspectorInstrumentation::willResizeImageImpl(bool shouldCache)
 494{
 495 if (InspectorTimelineAgent* timelineAgent = timelineAgentForOrphanEvents())
 496 timelineAgent->willResizeImage(shouldCache);
 497}
 498
 499void InspectorInstrumentation::didResizeImageImpl()
 500{
 501 if (InspectorTimelineAgent* timelineAgent = timelineAgentForOrphanEvents())
 502 timelineAgent->didResizeImage();
 503}
 504
481505void InspectorInstrumentation::willCompositeImpl(InstrumentingAgents* instrumentingAgents)
482506{
483507 if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent())

Source/WebCore/inspector/InspectorInstrumentation.h

@@public:
146146 static void didLoadXHR(const InspectorInstrumentationCookie&);
147147 static InspectorInstrumentationCookie willPaint(Frame*, GraphicsContext*, const LayoutRect&);
148148 static void didPaint(const InspectorInstrumentationCookie&);
 149 static void willDecodeImage(const String&);
 150 static void didDecodeImage();
 151 static void willResizeImage(bool);
 152 static void didResizeImage();
149153 static void willComposite(Page*);
150154 static void didComposite(Page*);
151155 static InspectorInstrumentationCookie willRecalculateStyle(Document*);

@@private:
323327 static void didLoadXHRImpl(const InspectorInstrumentationCookie&);
324328 static InspectorInstrumentationCookie willPaintImpl(InstrumentingAgents*, GraphicsContext*, const LayoutRect&, Frame*);
325329 static void didPaintImpl(const InspectorInstrumentationCookie&);
 330 static void willDecodeImageImpl(const String&);
 331 static void didDecodeImageImpl();
 332 static void willResizeImageImpl(bool);
 333 static void didResizeImageImpl();
326334 static void willCompositeImpl(InstrumentingAgents*);
327335 static void didCompositeImpl(InstrumentingAgents*);
328336 static InspectorInstrumentationCookie willRecalculateStyleImpl(InstrumentingAgents*, Frame*);

@@inline void InspectorInstrumentation::didPaint(const InspectorInstrumentationCoo
849857#endif
850858}
851859
 860inline void InspectorInstrumentation::willDecodeImage(const String& imageType)
 861{
 862#if ENABLE(INSPECTOR)
 863 FAST_RETURN_IF_NO_FRONTENDS(void());
 864 willDecodeImageImpl(imageType);
 865#endif
 866}
 867
 868inline void InspectorInstrumentation::didDecodeImage()
 869{
 870#if ENABLE(INSPECTOR)
 871 FAST_RETURN_IF_NO_FRONTENDS(void());
 872 didDecodeImageImpl();
 873#endif
 874}
 875
 876inline void InspectorInstrumentation::willResizeImage(bool shouldCache)
 877{
 878#if ENABLE(INSPECTOR)
 879 FAST_RETURN_IF_NO_FRONTENDS(void());
 880 willResizeImageImpl(shouldCache);
 881#endif
 882}
 883
 884inline void InspectorInstrumentation::didResizeImage()
 885{
 886#if ENABLE(INSPECTOR)
 887 FAST_RETURN_IF_NO_FRONTENDS(void());
 888 didResizeImageImpl();
 889#endif
 890}
 891
852892inline void InspectorInstrumentation::willComposite(Page* page)
853893{
854894#if ENABLE(INSPECTOR)

Source/WebCore/inspector/InspectorTimelineAgent.cpp

@@static const char BeginFrame[] = "BeginFrame";
6868static const char Layout[] = "Layout";
6969static const char RecalculateStyles[] = "RecalculateStyles";
7070static const char Paint[] = "Paint";
 71static const char DecodeImage[] = "DecodeImage";
 72static const char ResizeImage[] = "ResizeImage";
7173static const char CompositeLayers[] = "CompositeLayers";
7274
7375static const char ParseHTML[] = "ParseHTML";

@@void InspectorTimelineAgent::didPaint()
255257 didCompleteCurrentRecord(TimelineRecordType::Paint);
256258}
257259
 260void InspectorTimelineAgent::willDecodeImage(const String& imageType)
 261{
 262 pushCurrentRecord(TimelineRecordFactory::createDecodeImageData(imageType), TimelineRecordType::DecodeImage, true, 0);
 263}
 264
 265void InspectorTimelineAgent::didDecodeImage()
 266{
 267 didCompleteCurrentRecord(TimelineRecordType::DecodeImage);
 268}
 269
 270void InspectorTimelineAgent::willResizeImage(bool shouldCache)
 271{
 272 pushCurrentRecord(TimelineRecordFactory::createResizeImageData(shouldCache), TimelineRecordType::ResizeImage, true, 0);
 273}
 274
 275void InspectorTimelineAgent::didResizeImage()
 276{
 277 didCompleteCurrentRecord(TimelineRecordType::ResizeImage);
 278}
 279
258280void InspectorTimelineAgent::willComposite()
259281{
260282 pushCurrentRecord(InspectorObject::create(), TimelineRecordType::CompositeLayers, false, 0);

Source/WebCore/inspector/InspectorTimelineAgent.h

@@public:
100100 void willPaint(const LayoutRect&, Frame*);
101101 void didPaint();
102102
 103 void willDecodeImage(const String&);
 104 void didDecodeImage();
 105
 106 void willResizeImage(bool);
 107 void didResizeImage();
 108
103109 void willComposite();
104110 void didComposite();
105111

Source/WebCore/inspector/TimelineRecordFactory.cpp

@@PassRefPtr<InspectorObject> TimelineRecordFactory::createPaintData(const LayoutR
179179 return data.release();
180180}
181181
 182PassRefPtr<InspectorObject> TimelineRecordFactory::createDecodeImageData(const String& imageType)
 183{
 184 RefPtr<InspectorObject> data = InspectorObject::create();
 185 data->setString("imageType", imageType);
 186 return data.release();
 187}
 188
 189PassRefPtr<InspectorObject> TimelineRecordFactory::createResizeImageData(bool shouldCache)
 190{
 191 RefPtr<InspectorObject> data = InspectorObject::create();
 192 data->setBoolean("cached", shouldCache);
 193 return data.release();
 194}
 195
182196PassRefPtr<InspectorObject> TimelineRecordFactory::createParseHTMLData(unsigned int length, unsigned int startLine)
183197{
184198 RefPtr<InspectorObject> data = InspectorObject::create();

Source/WebCore/inspector/TimelineRecordFactory.h

@@namespace WebCore {
7777
7878 static PassRefPtr<InspectorObject> createPaintData(const LayoutRect&);
7979
 80 static PassRefPtr<InspectorObject> createDecodeImageData(const String& imageType);
 81
 82 static PassRefPtr<InspectorObject> createResizeImageData(bool shouldCache);
 83
8084 static PassRefPtr<InspectorObject> createParseHTMLData(unsigned int length, unsigned int startLine);
8185
8286 static PassRefPtr<InspectorObject> createAnimationFrameData(int callbackId);

Source/WebCore/inspector/front-end/TimelineModel.js

@@WebInspector.TimelineModel.RecordType = {
5252 Layout: "Layout",
5353 RecalculateStyles: "RecalculateStyles",
5454 Paint: "Paint",
 55 DecodeImage: "DecodeImage",
 56 ResizeImage: "ResizeImage",
5557 CompositeLayers: "CompositeLayers",
5658
5759 ParseHTML: "ParseHTML",

Source/WebCore/inspector/front-end/TimelinePresentationModel.js

@@WebInspector.TimelinePresentationModel.initRecordStyles_ = function()
7575 recordStyles[recordTypes.Layout] = { title: WebInspector.UIString("Layout"), category: categories["rendering"] };
7676 recordStyles[recordTypes.RecalculateStyles] = { title: WebInspector.UIString("Recalculate Style"), category: categories["rendering"] };
7777 recordStyles[recordTypes.Paint] = { title: WebInspector.UIString("Paint"), category: categories["painting"] };
 78 recordStyles[recordTypes.DecodeImage] = { title: WebInspector.UIString("Image Decode"), category: categories["painting"] };
 79 recordStyles[recordTypes.ResizeImage] = { title: WebInspector.UIString("Image Resize"), category: categories["painting"] };
7880 recordStyles[recordTypes.CompositeLayers] = { title: WebInspector.UIString("Composite Layers"), category: categories["painting"] };
7981 recordStyles[recordTypes.ParseHTML] = { title: WebInspector.UIString("Parse"), category: categories["loading"] };
8082 recordStyles[recordTypes.TimerInstall] = { title: WebInspector.UIString("Install Timer"), category: categories["scripting"] };

@@WebInspector.TimelinePresentationModel.Record.prototype = {
749751 return this.data ? this.data["type"] : null;
750752 case WebInspector.TimelineModel.RecordType.Paint:
751753 return this.data["width"] + "\u2009\u00d7\u2009" + this.data["height"];
 754 case WebInspector.TimelineModel.RecordType.DecodeImage:
 755 return this.data["imageType"];
 756 case WebInspector.TimelineModel.RecordType.ResizeImage:
 757 return this.data["cached"] ? WebInspector.UIString("cached") : WebInspector.UIString("non-cached");
752758 case WebInspector.TimelineModel.RecordType.TimerInstall:
753759 case WebInspector.TimelineModel.RecordType.TimerRemove:
754760 return this._linkifyTopCallFrame(this.data["timerId"]);

Source/WebCore/platform/graphics/skia/NativeImageSkia.cpp

3434
3535#include "NativeImageSkia.h"
3636#include "GraphicsContext3D.h"
 37#include "InspectorInstrumentation.h"
3738#include "SkiaUtils.h"
3839
3940#if PLATFORM(CHROMIUM)

@@SkBitmap NativeImageSkia::resizedBitmap(const SkIRect& srcSubset,
8889 TRACE_EVENT0("skia", "nonCachedResize");
8990#endif
9091 // Just resize the visible subset and return it.
 92 InspectorInstrumentation::willResizeImage(shouldCache);
9193 SkBitmap resizedImage = skia::ImageOperations::Resize(subset, skia::ImageOperations::RESIZE_LANCZOS3, destWidth, destHeight, destVisibleSubset);
 94 InspectorInstrumentation::didResizeImage();
9295 resizedImage.setImmutable();
9396 return resizedImage;
9497 } else {
9598#if PLATFORM(CHROMIUM)
9699 TRACE_EVENT0("skia", "cachedResize");
97100#endif
 101 InspectorInstrumentation::willResizeImage(shouldCache);
98102 m_resizedImage = skia::ImageOperations::Resize(subset, skia::ImageOperations::RESIZE_LANCZOS3, destWidth, destHeight);
 103 InspectorInstrumentation::didResizeImage();
99104 }
100105 m_resizedImage.setImmutable();
101106 }

Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp

3232#include "BMPImageDecoder.h"
3333
3434#include "BMPImageReader.h"
 35#include "InspectorInstrumentation.h"
3536#include <wtf/PassOwnPtr.h>
3637
3738#if PLATFORM(CHROMIUM)

@@ImageFrame* BMPImageDecoder::frameBufferAtIndex(size_t index)
8182 }
8283
8384 ImageFrame* buffer = &m_frameBufferCache.first();
84  if (buffer->status() != ImageFrame::FrameComplete)
 85 if (buffer->status() != ImageFrame::FrameComplete) {
 86 InspectorInstrumentation::willDecodeImage("BMP");
8587 decode(false);
 88 InspectorInstrumentation::didDecodeImage();
 89 }
8690 return buffer;
8791}
8892

Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp

2727#include "GIFImageDecoder.h"
2828
2929#include "GIFImageReader.h"
 30#include "InspectorInstrumentation.h"
3031#include <wtf/PassOwnPtr.h>
3132
3233#if PLATFORM(CHROMIUM)

@@ImageFrame* GIFImageDecoder::frameBufferAtIndex(size_t index)
130131 return 0;
131132
132133 ImageFrame& frame = m_frameBufferCache[index];
133  if (frame.status() != ImageFrame::FrameComplete)
 134 if (frame.status() != ImageFrame::FrameComplete) {
 135 InspectorInstrumentation::willDecodeImage("GIF");
134136 decode(index + 1, GIFFullQuery);
 137 InspectorInstrumentation::didDecodeImage();
 138 }
135139 return &frame;
136140}
137141

Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp

3434#include <algorithm>
3535
3636#include "BMPImageReader.h"
 37#include "InspectorInstrumentation.h"
3738#include "PNGImageDecoder.h"
3839#include <wtf/PassOwnPtr.h>
3940

@@ImageFrame* ICOImageDecoder::frameBufferAtIndex(size_t index)
121122 return 0;
122123
123124 ImageFrame* buffer = &m_frameBufferCache[index];
124  if (buffer->status() != ImageFrame::FrameComplete)
 125 if (buffer->status() != ImageFrame::FrameComplete) {
 126 InspectorInstrumentation::willDecodeImage("ICO");
125127 decode(index, false);
 128 InspectorInstrumentation::didDecodeImage();
 129 }
126130 return buffer;
127131}
128132

Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp

3939
4040#include "config.h"
4141#include "JPEGImageDecoder.h"
 42#include "InspectorInstrumentation.h"
4243#include <stdio.h> // Needed by jpeglib.h for FILE.
4344#include <wtf/PassOwnPtr.h>
4445

@@ImageFrame* JPEGImageDecoder::frameBufferAtIndex(size_t index)
540541 }
541542
542543 ImageFrame& frame = m_frameBufferCache[0];
543  if (frame.status() != ImageFrame::FrameComplete)
 544 if (frame.status() != ImageFrame::FrameComplete) {
 545 InspectorInstrumentation::willDecodeImage("JPEG");
544546 decode(false);
 547 InspectorInstrumentation::didDecodeImage();
 548 }
545549 return &frame;
546550}
547551

Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp

4040#include "config.h"
4141#include "PNGImageDecoder.h"
4242
 43#include "InspectorInstrumentation.h"
4344#include "png.h"
4445#include <wtf/OwnArrayPtr.h>
4546#include <wtf/PassOwnPtr.h>

@@ImageFrame* PNGImageDecoder::frameBufferAtIndex(size_t index)
261262 }
262263
263264 ImageFrame& frame = m_frameBufferCache[0];
264  if (frame.status() != ImageFrame::FrameComplete)
 265 if (frame.status() != ImageFrame::FrameComplete) {
 266 InspectorInstrumentation::willDecodeImage("PNG");
265267 decode(false);
 268 InspectorInstrumentation::didDecodeImage();
 269 }
266270 return &frame;
267271}
268272

Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp

3131
3232#if USE(WEBP)
3333
 34#include "InspectorInstrumentation.h"
3435#include "webp/decode.h"
3536
3637#if PLATFORM(CHROMIUM)

@@ImageFrame* WEBPImageDecoder::frameBufferAtIndex(size_t index)
8081 }
8182
8283 ImageFrame& frame = m_frameBufferCache[0];
83  if (frame.status() != ImageFrame::FrameComplete)
 84 if (frame.status() != ImageFrame::FrameComplete) {
 85 InspectorInstrumentation::willDecodeImage("WEBP");
8486 decode(false);
 87 InspectorInstrumentation::didDecodeImage();
 88 }
8589 return &frame;
8690}
8791

LayoutTests/ChangeLog

 12012-08-03 Sergey Rogulenko <rogulenko@google.com>
 2
 3 Web Inspector: added Paint events for Images to TimelineAgent
 4 https://bugs.webkit.org/show_bug.cgi?id=90277
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Added a test and fixed enum-stabitily because of a new Timeline Event.
 9
 10 * inspector/timeline/resources/big.png: Added.
 11 * inspector/timeline/resources/test.bmp: Added.
 12 * inspector/timeline/resources/test.gif: Added.
 13 * inspector/timeline/resources/test.ico: Added.
 14 * inspector/timeline/resources/test.jpg: Added.
 15 * inspector/timeline/resources/test.png: Added.
 16 * inspector/timeline/resources/test.webp: Added.
 17 * inspector/timeline/timeline-decode-resize-expected.txt: Added.
 18 * inspector/timeline/timeline-decode-resize.html: Added.
 19 * inspector/timeline/timeline-enum-stability-expected.txt:
 20
1212012-08-03 Sergio Carlos Morales Angeles <carloschilazo@gmail.com>
222
323 Delete text from password does nothing.

LayoutTests/inspector/timeline/resources/big.png


Added


LayoutTests/inspector/timeline/resources/test.bmp

Binary file, nothing to see here

LayoutTests/inspector/timeline/resources/test.gif


Added


LayoutTests/inspector/timeline/resources/test.ico

Binary file, nothing to see here

LayoutTests/inspector/timeline/resources/test.jpg


Added


LayoutTests/inspector/timeline/resources/test.png


Added


LayoutTests/inspector/timeline/resources/test.webp

Binary file, nothing to see here

LayoutTests/inspector/timeline/timeline-decode-resize-expected.txt

 1Tests the Timeline API instrumentation of a DecodeImage and ResizeImage events
 2
 3
 4DecodeImage Properties:
 5{
 6 startTime : <number>
 7 stackTrace : <object>
 8 data : {
 9 imageType : "BMP"
 10 }
 11 children : <object>
 12 endTime : <number>
 13 type : "DecodeImage"
 14 usedHeapSize : <number>
 15 totalHeapSize : <number>
 16 counters : <object>
 17}
 18ResizeImage Properties:
 19{
 20 startTime : <number>
 21 stackTrace : <object>
 22 data : {
 23 cached : true
 24 }
 25 children : <object>
 26 endTime : <number>
 27 type : "ResizeImage"
 28 usedHeapSize : <number>
 29 totalHeapSize : <number>
 30 counters : <object>
 31}
 32DecodeImage Properties:
 33{
 34 startTime : <number>
 35 stackTrace : <object>
 36 data : {
 37 imageType : "GIF"
 38 }
 39 children : <object>
 40 endTime : <number>
 41 type : "DecodeImage"
 42 usedHeapSize : <number>
 43 totalHeapSize : <number>
 44 counters : <object>
 45}
 46ResizeImage Properties:
 47{
 48 startTime : <number>
 49 stackTrace : <object>
 50 data : {
 51 cached : true
 52 }
 53 children : <object>
 54 endTime : <number>
 55 type : "ResizeImage"
 56 usedHeapSize : <number>
 57 totalHeapSize : <number>
 58 counters : <object>
 59}
 60DecodeImage Properties:
 61{
 62 startTime : <number>
 63 stackTrace : <object>
 64 data : {
 65 imageType : "ICO"
 66 }
 67 children : <object>
 68 endTime : <number>
 69 type : "DecodeImage"
 70 usedHeapSize : <number>
 71 totalHeapSize : <number>
 72 counters : <object>
 73}
 74ResizeImage Properties:
 75{
 76 startTime : <number>
 77 stackTrace : <object>
 78 data : {
 79 cached : true
 80 }
 81 children : <object>
 82 endTime : <number>
 83 type : "ResizeImage"
 84 usedHeapSize : <number>
 85 totalHeapSize : <number>
 86 counters : <object>
 87}
 88DecodeImage Properties:
 89{
 90 startTime : <number>
 91 stackTrace : <object>
 92 data : {
 93 imageType : "JPEG"
 94 }
 95 children : <object>
 96 endTime : <number>
 97 type : "DecodeImage"
 98 usedHeapSize : <number>
 99 totalHeapSize : <number>
 100 counters : <object>
 101}
 102ResizeImage Properties:
 103{
 104 startTime : <number>
 105 stackTrace : <object>
 106 data : {
 107 cached : true
 108 }
 109 children : <object>
 110 endTime : <number>
 111 type : "ResizeImage"
 112 usedHeapSize : <number>
 113 totalHeapSize : <number>
 114 counters : <object>
 115}
 116DecodeImage Properties:
 117{
 118 startTime : <number>
 119 stackTrace : <object>
 120 data : {
 121 imageType : "PNG"
 122 }
 123 children : <object>
 124 endTime : <number>
 125 type : "DecodeImage"
 126 usedHeapSize : <number>
 127 totalHeapSize : <number>
 128 counters : <object>
 129}
 130ResizeImage Properties:
 131{
 132 startTime : <number>
 133 stackTrace : <object>
 134 data : {
 135 cached : true
 136 }
 137 children : <object>
 138 endTime : <number>
 139 type : "ResizeImage"
 140 usedHeapSize : <number>
 141 totalHeapSize : <number>
 142 counters : <object>
 143}
 144DecodeImage Properties:
 145{
 146 startTime : <number>
 147 stackTrace : <object>
 148 data : {
 149 imageType : "WEBP"
 150 }
 151 children : <object>
 152 endTime : <number>
 153 type : "DecodeImage"
 154 usedHeapSize : <number>
 155 totalHeapSize : <number>
 156 counters : <object>
 157}
 158ResizeImage Properties:
 159{
 160 startTime : <number>
 161 stackTrace : <object>
 162 data : {
 163 cached : true
 164 }
 165 children : <object>
 166 endTime : <number>
 167 type : "ResizeImage"
 168 usedHeapSize : <number>
 169 totalHeapSize : <number>
 170 counters : <object>
 171}
 172DecodeImage Properties:
 173{
 174 startTime : <number>
 175 stackTrace : <object>
 176 data : {
 177 imageType : "PNG"
 178 }
 179 children : <object>
 180 endTime : <number>
 181 type : "DecodeImage"
 182 usedHeapSize : <number>
 183 totalHeapSize : <number>
 184 counters : <object>
 185}
 186ResizeImage Properties:
 187{
 188 startTime : <number>
 189 stackTrace : <object>
 190 data : {
 191 cached : false
 192 }
 193 children : <object>
 194 endTime : <number>
 195 type : "ResizeImage"
 196 usedHeapSize : <number>
 197 totalHeapSize : <number>
 198 counters : <object>
 199}
 200

LayoutTests/inspector/timeline/timeline-decode-resize.html

 1<html>
 2<head>
 3<script src="../../http/tests/inspector/inspector-test.js"></script>
 4<script src="timeline-test.js"></script>
 5<script>
 6
 7function addImage(src, width, height, callback)
 8{
 9 var img = document.createElement("img");
 10 img.width = width;
 11 img.height = height;
 12 img.onload = callback;
 13 img.src = src;
 14 document.body.appendChild(img);
 15}
 16
 17function addImage1() { addImage("resources/test.bmp", "25", "25", addImage2); }
 18function addImage2() { addImage("resources/test.gif", "25", "25", addImage3); }
 19function addImage3() { addImage("resources/test.ico", "25", "25", addImage4); }
 20function addImage4() { addImage("resources/test.jpg", "25", "25", addImage5); }
 21function addImage5() { addImage("resources/test.png", "25", "25", addImage6); }
 22function addImage6() { addImage("resources/test.webp", "25", "25", addImage7); }
 23function addImage7() { addImage("resources/big.png", "5000", "5000", displayPage); }
 24
 25function displayPage()
 26{
 27 if (window.testRunner)
 28 testRunner.display();
 29}
 30
 31function test()
 32{
 33 recordCount = 0;
 34 InspectorTest.startTimeline(step1);
 35 InspectorTest.waitForRecordType("ResizeImage", processRecord);
 36 InspectorTest.waitForRecordType("DecodeImage", processRecord);
 37
 38 function step1()
 39 {
 40 InspectorTest.evaluateInPage("addImage1()");
 41 }
 42
 43 window.step2 = function()
 44 {
 45 InspectorTest.stopTimeline();
 46 }
 47
 48 function step3(records)
 49 {
 50 for (var i = 0; i < records.length; ++i) {
 51 var record = records[i];
 52 if (record.type === WebInspector.TimelineModel.RecordType.DecodeImage || record.type === WebInspector.TimelineModel.RecordType.ResizeImage)
 53 InspectorTest.printTimelineRecordProperties(record);
 54 }
 55 InspectorTest.completeTest();
 56 }
 57
 58 function processRecord(record)
 59 {
 60 recordCount++;
 61 if (recordCount == 14)
 62 InspectorTest.stopTimeline(step3);
 63 }
 64}
 65
 66</script>
 67</head>
 68
 69<body onload="runTest()">
 70<p>
 71Tests the Timeline API instrumentation of a DecodeImage and ResizeImage events
 72</p>
 73
 74</body>
 75</html>

LayoutTests/inspector/timeline/timeline-enum-stability-expected.txt

@@Applications outside of WebKit depend on the stability of the mapping of these t
1010 Layout : "Layout"
1111 RecalculateStyles : "RecalculateStyles"
1212 Paint : "Paint"
 13 DecodeImage : "DecodeImage"
 14 ResizeImage : "ResizeImage"
1315 CompositeLayers : "CompositeLayers"
1416 ParseHTML : "ParseHTML"
1517 TimerInstall : "TimerInstall"