Index: debugger/QT/SkDebuggerGUI.cpp |
diff --git a/debugger/QT/SkDebuggerGUI.cpp b/debugger/QT/SkDebuggerGUI.cpp |
index d444152eabe9007d3849a0249422d53df886accb..4383f65771d0491caf4d3e59cdb8e3dcd430e70f 100644 |
--- a/debugger/QT/SkDebuggerGUI.cpp |
+++ b/debugger/QT/SkDebuggerGUI.cpp |
@@ -147,10 +147,20 @@ void SkDebuggerGUI::showDeletes() { |
// offsets to individual commands. |
class SkTimedPicturePlayback : public SkPicturePlayback { |
public: |
- SkTimedPicturePlayback(SkStream* stream, const SkPictInfo& info, |
- SkPicture::InstallPixelRefProc proc, |
- const SkTDArray<bool>& deletedCommands) |
- : INHERITED(stream, info, proc) |
+ static SkTimedPicturePlayback* CreateFromStream(SkStream* stream, const SkPictInfo& info, |
+ SkPicture::InstallPixelRefProc proc, |
+ const SkTDArray<bool>& deletedCommands) { |
+ // Mimics SkPicturePlayback::CreateFromStream |
+ SkAutoTDelete<SkTimedPicturePlayback> playback(SkNEW_ARGS(SkTimedPicturePlayback, |
+ (deletedCommands))); |
+ if (!playback->parseStream(stream, info, proc)) { |
+ return NULL; // we're invalid |
+ } |
+ return playback.detach(); |
+ } |
+ |
+ SkTimedPicturePlayback(const SkTDArray<bool>& deletedCommands) |
+ : INHERITED() |
, fSkipCommands(deletedCommands) |
, fTot(0.0) |
, fCurCommand(0) { |
@@ -232,6 +242,14 @@ protected: |
#endif |
private: |
+ // SkPicturePlayback::parseStream is protected, so it can be |
+ // called here, but not by our static factory function. This |
+ // allows the factory function to call it. |
+ bool parseStream(SkStream* stream, const SkPictInfo& info, |
+ SkPicture::InstallPixelRefProc proc) { |
+ return this->INHERITED::parseStream(stream, info, proc); |
+ } |
+ |
typedef SkPicturePlayback INHERITED; |
}; |
@@ -249,8 +267,11 @@ public: |
SkTimedPicturePlayback* playback; |
// Check to see if there is a playback to recreate. |
if (stream->readBool()) { |
- playback = SkNEW_ARGS(SkTimedPicturePlayback, |
- (stream, info, proc, deletedCommands)); |
+ playback = SkTimedPicturePlayback::CreateFromStream(stream, info, proc, |
+ deletedCommands); |
+ if (NULL == playback) { |
+ return NULL; |
+ } |
} else { |
playback = NULL; |
} |