From c6ad9eefa0f8d0c2ede9884b446c65dde9b04dd1 Mon Sep 17 00:00:00 2001 From: mtklein Date: Mon, 17 Nov 2014 06:45:18 -0800 Subject: More SkPicture cleanup - move field declarations together and pack them a little tighter - get rid of fData - remove dead code in debugger, including unused SkPicturePlayback subclass There are now no more long-lived SkPictureData! (Really, there never were, but now we don't pretend to support them.) BUG=skia: No API changes. TBR=reed@google.com Review URL: https://codereview.chromium.org/725143002 --- debugger/QT/SkDebuggerGUI.cpp | 245 ------------------------------------------ 1 file changed, 245 deletions(-) (limited to 'debugger') diff --git a/debugger/QT/SkDebuggerGUI.cpp b/debugger/QT/SkDebuggerGUI.cpp index 4901d62389..4b87f0f841 100644 --- a/debugger/QT/SkDebuggerGUI.cpp +++ b/debugger/QT/SkDebuggerGUI.cpp @@ -155,192 +155,6 @@ void SkDebuggerGUI::showDeletes() { item->setHidden(fDebugger.isCommandVisible(row) && fDeletesActivated); } } - -// The timed picture playback just steps through every operation timing -// each one individually. Note that each picture should be replayed multiple -// times (via calls to 'draw') before each command's time is accessed via 'time'. -class SkTimedPicturePlayback : public SkPicturePlayback { -public: - - SkTimedPicturePlayback(const SkPicture* picture, const SkTDArray& deletedCommands) - : INHERITED(picture) - , fSkipCommands(deletedCommands) - , fTot(0.0) - , fCurCommand(0) { - fTimes.setCount(deletedCommands.count()); - fTypeTimes.setCount(LAST_DRAWTYPE_ENUM+1); - this->resetTimes(); - } - - virtual void draw(SkCanvas* canvas, SkDrawPictureCallback* callback) SK_OVERRIDE { - AutoResetOpID aroi(this); - SkASSERT(0 == fCurOffset); - - SkReader32 reader(fPictureData->opData()->bytes(), fPictureData->opData()->size()); - - // Record this, so we can concat w/ it if we encounter a setMatrix() - SkMatrix initialMatrix = canvas->getTotalMatrix(); - - SkAutoCanvasRestore acr(canvas, false); - - int opIndex = -1; - - while (!reader.eof()) { - if (callback && callback->abortDrawing()) { - return; - } - - fCurOffset = reader.offset(); - uint32_t size; - DrawType op = ReadOpAndSize(&reader, &size); - if (NOOP == op) { - // NOOPs are to be ignored - do not propagate them any further - reader.setOffset(fCurOffset + size); - continue; - } - - opIndex++; - - if (this->preDraw(opIndex, op)) { - // This operation is disabled in the debugger's GUI - reader.setOffset(fCurOffset + size); - continue; - } - - this->handleOp(&reader, op, size, canvas, initialMatrix); - - this->postDraw(opIndex); - } - } - - void resetTimes() { - for (int i = 0; i < fTimes.count(); ++i) { - fTimes[i] = 0.0; - } - for (int i = 0; i < fTypeTimes.count(); ++i) { - fTypeTimes[i] = 0.0f; - } - fTot = 0.0; - } - - int count() const { return fTimes.count(); } - - // Return the fraction of the total time consumed by the index-th operation - double time(int index) const { return fTimes[index] / fTot; } - - const SkTDArray* typeTimes() const { return &fTypeTimes; } - - double totTime() const { return fTot; } - -protected: - SysTimer fTimer; - SkTDArray fSkipCommands; // has the command been deleted in the GUI? - SkTDArray fTimes; // sum of time consumed for each command - SkTDArray fTypeTimes; // sum of time consumed for each type of command (e.g., drawPath) - double fTot; // total of all times in 'fTimes' - - int fCurType; - int fCurCommand; // the current command being executed/timed - - bool preDraw(int opIndex, int type) { - fCurCommand = opIndex; - - if (fSkipCommands[fCurCommand]) { - return true; - } - - fCurType = type; - // The SkDebugCanvas doesn't recognize these types. This class needs to - // convert or else we'll wind up with a mismatch between the type counts - // the debugger displays and the profile times. - if (DRAW_POS_TEXT_TOP_BOTTOM == type) { - fCurType = DRAW_POS_TEXT; - } else if (DRAW_POS_TEXT_H_TOP_BOTTOM == type) { - fCurType = DRAW_POS_TEXT_H; - } - -#if defined(SK_BUILD_FOR_WIN32) - // CPU timer doesn't work well on Windows - fTimer.startWall(); -#else - fTimer.startCpu(); -#endif - - return false; - } - - void postDraw(int opIndex) { -#if defined(SK_BUILD_FOR_WIN32) - // CPU timer doesn't work well on Windows - double time = fTimer.endWall(); -#else - double time = fTimer.endCpu(); -#endif - - SkASSERT(opIndex == fCurCommand); - SkASSERT(fCurType <= LAST_DRAWTYPE_ENUM); - - fTimes[fCurCommand] += time; - fTypeTimes[fCurType] += time; - fTot += time; - } - -private: - typedef SkPicturePlayback INHERITED; -}; - -#if 0 -// Wrap SkPicture to allow installation of an SkTimedPicturePlayback object -class SkTimedPicture : public SkPicture { -public: - static SkTimedPicture* CreateTimedPicture(SkStream* stream, - SkPicture::InstallPixelRefProc proc, - const SkTDArray& deletedCommands) { - SkPictInfo info; - if (!InternalOnly_StreamIsSKP(stream, &info)) { - return NULL; - } - - // Check to see if there is a playback to recreate. - if (stream->readBool()) { - SkTimedPicturePlayback* playback = SkTimedPicturePlayback::CreateFromStream( - stream, - info, proc, - deletedCommands); - if (NULL == playback) { - return NULL; - } - - return SkNEW_ARGS(SkTimedPicture, (playback, info.fWidth, info.fHeight)); - } - - return NULL; - } - - void resetTimes() { ((SkTimedPicturePlayback*) fData.get())->resetTimes(); } - - int count() const { return ((SkTimedPicturePlayback*) fData.get())->count(); } - - // return the fraction of the total time this command consumed - double time(int index) const { return ((SkTimedPicturePlayback*) fData.get())->time(index); } - - const SkTDArray* typeTimes() const { return ((SkTimedPicturePlayback*) fData.get())->typeTimes(); } - - double totTime() const { return ((SkTimedPicturePlayback*) fData.get())->totTime(); } - -private: - // disallow default ctor b.c. we don't have a good way to setup the fData 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); - - typedef SkPicture INHERITED; -}; -#endif - // This is a simplification of PictureBenchmark's run with the addition of // clearing of the times after the first pass (in resetTimes) void SkDebuggerGUI::run(const SkPicture* pict, @@ -362,11 +176,6 @@ void SkDebuggerGUI::run(const SkPicture* pict, renderer->render(); renderer->resetState(true); // flush, swapBuffers and Finish -#if 0 - // We throw this away the first batch of times to remove first time effects (such as paging in this program) - pict->resetTimes(); -#endif - for (int i = 0; i < repeats; ++i) { renderer->setup(); renderer->render(); @@ -399,60 +208,6 @@ void SkDebuggerGUI::actionProfile() { if (NULL == picture.get()) { return; } - - -#if 0 - - // For now this #if allows switching between tiled and simple rendering - // modes. Eventually this will be accomplished via the GUI -#if 0 - // With the current batch of SysTimers, profiling in tiled mode - // gets swamped by the timing overhead: - // - // tile mode simple mode - // debugger 64.2ms 12.8ms - // bench_pictures 16.9ms 12.4ms - // - // This is b.c. in tiled mode each command is called many more times - // but typically does less work on each invocation (due to clipping) - sk_tools::TiledPictureRenderer* renderer = NULL; - - renderer = SkNEW(sk_tools::TiledPictureRenderer); - renderer->setTileWidth(256); - renderer->setTileHeight(256); -#else - sk_tools::SimplePictureRenderer* renderer = NULL; - - renderer = SkNEW(sk_tools::SimplePictureRenderer); - -#if SK_SUPPORT_GPU - if (fSettingsWidget.isGLActive()) { - renderer->setDeviceType(sk_tools::PictureRenderer::kGPU_DeviceType); - renderer->setSampleCount(fSettingsWidget.getGLSampleCount()); - } -#endif - -#endif - - static const int kNumRepeats = 10; - - run(picture.get(), renderer, kNumRepeats); - - 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); - - QListWidgetItem* item = fListWidget.item(i); - - item->setData(Qt::UserRole + 4, 100.0*temp); - } - - setupOverviewText(picture->typeTimes(), picture->totTime(), kNumRepeats); - setupClipStackText(); - -#endif } void SkDebuggerGUI::actionCancel() { -- cgit v1.2.3