diff options
author | Florin Malita <fmalita@chromium.org> | 2017-12-24 11:45:38 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-24 17:06:42 +0000 |
commit | e5ae84bea7ea2724c9d0ca4825eae1303440a9ac (patch) | |
tree | 637dc6f2951124dc31a3442729601e1995779ae3 /samplecode/SampleRectanizer.cpp | |
parent | 1395994aa02795d6c887124cb15813484ba65061 (diff) |
Fix leak in GM:Rectanizer
TBR=
Change-Id: I0e6135ac7fac433a0539f00a45f569ce4f48aa7c
Reviewed-on: https://skia-review.googlesource.com/89421
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'samplecode/SampleRectanizer.cpp')
-rw-r--r-- | samplecode/SampleRectanizer.cpp | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/samplecode/SampleRectanizer.cpp b/samplecode/SampleRectanizer.cpp index fe1275d1f9..752d5b7136 100644 --- a/samplecode/SampleRectanizer.cpp +++ b/samplecode/SampleRectanizer.cpp @@ -13,7 +13,6 @@ #include "GrRectanizer_pow2.h" #include "GrRectanizer_skyline.h" - // This slide visualizes the various GrRectanizer-derived classes behavior // for various input sets // 'j' will cycle through the various rectanizers @@ -26,7 +25,8 @@ class RectanizerView : public SampleView { public: RectanizerView() - : fCurRandRect(0) { + : fCurRandRect(0) + , fCurRectanizer(0) { for (int i = 0; i < 3; ++i) { fRects[i].setReserve(kNumRandRects); } @@ -45,9 +45,10 @@ public: fCurRects = &fRects[0]; - fRectanizers[0] = new GrRectanizerPow2(kWidth, kHeight); - fRectanizers[1] = new GrRectanizerSkyline(kWidth, kHeight); - fCurRectanizer = fRectanizers[0]; + fRectanizers.push_back( + std::unique_ptr<GrRectanizer>(new GrRectanizerPow2(kWidth, kHeight))); + fRectanizers.push_back( + std::unique_ptr<GrRectanizer>(new GrRectanizerSkyline(kWidth, kHeight))); } protected: @@ -79,9 +80,9 @@ protected: void onDrawContent(SkCanvas* canvas) override { if (fCurRandRect < kNumRandRects) { - if (fCurRectanizer->addRect((*fCurRects)[fCurRandRect].fWidth, - (*fCurRects)[fCurRandRect].fHeight, - &fRectLocations[fCurRandRect])) { + if (fRectanizers[fCurRectanizer]->addRect((*fCurRects)[fCurRandRect].fWidth, + (*fCurRects)[fCurRandRect].fHeight, + &fRectLocations[fCurRandRect])) { ++fCurRandRect; } } @@ -115,7 +116,7 @@ protected: this->getRectanizerName(), this->getRectsName(), totArea, - 100.0f * fCurRectanizer->percentFull(), + 100.0f * fRectanizers[fCurRectanizer]->percentFull(), 100.0f * totArea / ((float)kWidth*kHeight), fCurRandRect, kNumRandRects); @@ -137,15 +138,15 @@ private: static const int kMinRectSize = 2; static const int kMaxRectSize = 256; - int fCurRandRect; - SkTDArray<SkISize> fRects[3]; - SkTDArray<SkISize>* fCurRects; - SkTDArray<SkIPoint16> fRectLocations; - GrRectanizer* fRectanizers[2]; - GrRectanizer* fCurRectanizer; + int fCurRandRect; + SkTDArray<SkISize> fRects[3]; + SkTDArray<SkISize>* fCurRects; + SkTDArray<SkIPoint16> fRectLocations; + SkTArray<std::unique_ptr<GrRectanizer>> fRectanizers; + int fCurRectanizer; const char* getRectanizerName() const { - if (fCurRectanizer == fRectanizers[0]) { + if (!fCurRectanizer) { return "Pow2"; } else { return "Skyline"; @@ -153,13 +154,9 @@ private: } void cycleRectanizer() { - if (fCurRectanizer == fRectanizers[0]) { - fCurRectanizer = fRectanizers[1]; - } else { - fCurRectanizer = fRectanizers[0]; - } + fCurRectanizer = (fCurRectanizer + 1) % fRectanizers.count(); - fCurRectanizer->reset(); + fRectanizers[fCurRectanizer]->reset(); fCurRandRect = 0; } @@ -182,7 +179,7 @@ private: fCurRects = &fRects[0]; } - fCurRectanizer->reset(); + fRectanizers[fCurRectanizer]->reset(); fCurRandRect = 0; } |