| Index: debugger/QT/SkDebuggerGUI.cpp
|
| diff --git a/debugger/QT/SkDebuggerGUI.cpp b/debugger/QT/SkDebuggerGUI.cpp
|
| index f5f9bc63312999d1bf753f7334e32b946e4a2048..67277070e5124576607754c402ecf261d82713a2 100644
|
| --- a/debugger/QT/SkDebuggerGUI.cpp
|
| +++ b/debugger/QT/SkDebuggerGUI.cpp
|
| @@ -237,35 +237,24 @@ private:
|
| // Wrap SkPicture to allow installation of an SkTimedPicturePlayback object
|
| class SkTimedPicture : public SkPicture {
|
| public:
|
| - explicit SkTimedPicture(SkStream* stream, bool* success, SkPicture::InstallPixelRefProc proc,
|
| - const SkTDArray<bool>& deletedCommands) {
|
| - if (success) {
|
| - *success = false;
|
| - }
|
| - fRecord = NULL;
|
| - fPlayback = NULL;
|
| - fWidth = fHeight = 0;
|
| -
|
| + static SkTimedPicture* CreateTimedPicture(SkStream* stream,
|
| + SkPicture::InstallPixelRefProc proc,
|
| + const SkTDArray<bool>& deletedCommands) {
|
| SkPictInfo info;
|
| -
|
| - if (!stream->read(&info, sizeof(info))) {
|
| - return;
|
| - }
|
| - if (SkPicture::PICTURE_VERSION != info.fVersion) {
|
| - return;
|
| + if (!StreamIsSKP(stream, &info)) {
|
| + return NULL;
|
| }
|
|
|
| + SkTimedPicturePlayback* playback;
|
| + // Check to see if there is a playback to recreate.
|
| if (stream->readBool()) {
|
| - fPlayback = SkNEW_ARGS(SkTimedPicturePlayback,
|
| - (stream, info, proc, deletedCommands));
|
| + playback = SkNEW_ARGS(SkTimedPicturePlayback,
|
| + (stream, info, proc, deletedCommands));
|
| + } else {
|
| + playback = NULL;
|
| }
|
|
|
| - // do this at the end, so that they will be zero if we hit an error.
|
| - fWidth = info.fWidth;
|
| - fHeight = info.fHeight;
|
| - if (success) {
|
| - *success = true;
|
| - }
|
| + return SkNEW_ARGS(SkTimedPicture, (playback, info.fWidth, info.fHeight));
|
| }
|
|
|
| void resetTimes() { ((SkTimedPicturePlayback*) fPlayback)->resetTimes(); }
|
| @@ -282,6 +271,9 @@ public:
|
| private:
|
| // disallow default ctor b.c. we don't have a good way to setup the fPlayback ptr
|
| SkTimedPicture();
|
| + // Private ctor only used by CreateTimedPicture, which has created the playback.
|
| + SkTimedPicture(SkTimedPicturePlayback* playback, int width, int height)
|
| + : INHERITED(playback, width, height) {}
|
| // disallow the copy ctor - enabling would require copying code from SkPicture
|
| SkTimedPicture(const SkTimedPicture& src);
|
|
|
| @@ -338,10 +330,9 @@ void SkDebuggerGUI::actionProfile() {
|
| return;
|
| }
|
|
|
| - bool success = false;
|
| - SkTimedPicture picture(&inputStream, &success, &SkImageDecoder::DecodeMemory,
|
| - fSkipCommands);
|
| - if (!success) {
|
| + SkAutoTUnref<SkTimedPicture> picture(SkTimedPicture::CreateTimedPicture(&inputStream,
|
| + &SkImageDecoder::DecodeMemory, fSkipCommands));
|
| + if (NULL == picture.get()) {
|
| return;
|
| }
|
|
|
| @@ -377,20 +368,20 @@ void SkDebuggerGUI::actionProfile() {
|
|
|
| static const int kNumRepeats = 10;
|
|
|
| - run(&picture, renderer, kNumRepeats);
|
| + run(picture.get(), renderer, kNumRepeats);
|
|
|
| - SkASSERT(picture.count() == fListWidget.count());
|
| + SkASSERT(picture->count() == fListWidget.count());
|
|
|
| // extract the individual command times from the SkTimedPlaybackPicture
|
| - for (int i = 0; i < picture.count(); ++i) {
|
| - double temp = picture.time(i);
|
| + for (int i = 0; i < picture->count(); ++i) {
|
| + double temp = picture->time(i);
|
|
|
| QListWidgetItem* item = fListWidget.item(i);
|
|
|
| item->setData(Qt::UserRole + 4, 100.0*temp);
|
| }
|
|
|
| - setupOverviewText(picture.typeTimes(), picture.totTime(), kNumRepeats);
|
| + setupOverviewText(picture->typeTimes(), picture->totTime(), kNumRepeats);
|
| }
|
|
|
| void SkDebuggerGUI::actionCancel() {
|
| @@ -905,12 +896,9 @@ void SkDebuggerGUI::loadPicture(const SkString& fileName) {
|
| fLoading = true;
|
| SkStream* stream = SkNEW_ARGS(SkFILEStream, (fileName.c_str()));
|
|
|
| - bool success = false;
|
| -
|
| - SkPicture* picture = SkNEW_ARGS(SkPicture,
|
| - (stream, &success, &SkImageDecoder::DecodeMemory));
|
| + SkPicture* picture = SkPicture::CreateFromStream(stream);
|
|
|
| - if (!success) {
|
| + if (NULL == picture) {
|
| QMessageBox::critical(this, "Error loading file", "Couldn't read file, sorry.");
|
| SkSafeUnref(stream);
|
| return;
|
|
|