From d9b8d7ac1fb4628f3411253c0fc6cd37e4ff0487 Mon Sep 17 00:00:00 2001 From: mtklein Date: Wed, 9 Sep 2015 07:22:09 -0700 Subject: [PATCH] Revert of Make SkGraphics::Term a no-op, stop calling it. (patchset #2 id:20001 of https://codereview.chromium.org/1329853005/ ) Reason for revert: SK_ATTR_DEPRECATED is meaningful to Android. Don't use it. Original issue's description: > Make SkGraphics::Term a no-op, stop calling it. > > I'd remove it entirely but Android is calling it explicitly. > > BUG=skia:4259 > > Committed: https://skia.googlesource.com/skia/+/925979f733fe8e70d84627147dee04d030423349 TBR=reed@google.com,scroggo@google.com,mtklein@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia:4259 Review URL: https://codereview.chromium.org/1314483006 --- debugger/debuggermain.cpp | 1 + example/HelloWorld.cpp | 1 + experimental/SimpleCocoaApp/SimpleApp.mm | 15 ++++++++------- experimental/SimpleiOSApp/SimpleApp.mm | 10 ++-------- experimental/SkV8Example/SkV8Example.cpp | 1 + include/core/SkGraphics.h | 9 +++++++-- include/core/SkPaint.h | 5 ++++- include/views/SkEvent.h | 2 +- samplecode/SampleApp.cpp | 1 + src/core/SkGraphics.cpp | 6 ++++++ src/core/SkPaint.cpp | 12 ++++++++++++ tests/PathOpsSkpClipTest.cpp | 1 + tools/VisualBench/VisualBench.cpp | 1 + tools/filtermain.cpp | 1 + tools/iOSShell.cpp | 1 + 15 files changed, 48 insertions(+), 19 deletions(-) diff --git a/debugger/debuggermain.cpp b/debugger/debuggermain.cpp index eebcd5f..0aec02b 100644 --- a/debugger/debuggermain.cpp +++ b/debugger/debuggermain.cpp @@ -67,5 +67,6 @@ int main(int argc, char *argv[]) { w.show(); int result = a.exec(); + SkGraphics::Term(); return result; } diff --git a/example/HelloWorld.cpp b/example/HelloWorld.cpp index 0d12d0fb..495d2af 100644 --- a/example/HelloWorld.cpp +++ b/example/HelloWorld.cpp @@ -23,6 +23,7 @@ void application_init() { void application_term() { SkEvent::Term(); + SkGraphics::Term(); } HelloWorldWindow::HelloWorldWindow(void* hwnd) diff --git a/experimental/SimpleCocoaApp/SimpleApp.mm b/experimental/SimpleCocoaApp/SimpleApp.mm index 95684c1..6f9958f 100644 --- a/experimental/SimpleCocoaApp/SimpleApp.mm +++ b/experimental/SimpleCocoaApp/SimpleApp.mm @@ -69,7 +69,7 @@ protected: // SkRect r = {50, 50, 80, 80}; p.setColor(0xAA11EEAA); // canvas->drawRect(r, p); - + SkRect result; SkPath path; path.moveTo(0, 0); @@ -77,7 +77,7 @@ protected: path.lineTo(1, 8); path.lineTo(0, 9); SkASSERT(path.hasRectangularInterior(&result)); - + path.reset(); path.addRect(10, 10, 100, 100, SkPath::kCW_Direction); path.addRect(20, 20, 50, 50, SkPath::kCW_Direction); @@ -94,7 +94,7 @@ protected: } private: - typedef SkView INHERITED; + typedef SkView INHERITED; }; void application_init(); @@ -194,12 +194,12 @@ class PathCanvas : public SkCanvas { path.hasRectangularInterior(©); SkDebugf("\n\n"); } - + virtual void drawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY, const SkPaint& paint) { } - + public: void divName(const SkString& str, bool only) { filename = str; @@ -211,14 +211,14 @@ public: count = 0; nameonly = only; } - + void init() { pointsMin = verbsMin = SK_MaxS32; pointsMax = verbsMax = SK_MinS32; rectPointsMin = rectVerbsMin = SK_MaxS32; rectPointsMax = rectVerbsMax = SK_MinS32; } - + SkString filename; int count; bool nameonly; @@ -279,6 +279,7 @@ void application_init() { } void application_term() { + SkGraphics::Term(); SkEvent::Term(); } diff --git a/experimental/SimpleiOSApp/SimpleApp.mm b/experimental/SimpleiOSApp/SimpleApp.mm index 123449f..040472c 100644 --- a/experimental/SimpleiOSApp/SimpleApp.mm +++ b/experimental/SimpleiOSApp/SimpleApp.mm @@ -1,10 +1,3 @@ -/* - * Copyright 2015 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - #include "SkApplication.h" #import "SkCanvas.h" #import "SkPaint.h" @@ -33,7 +26,7 @@ protected: canvas->drawRect(r, p); } private: - typedef SkView INHERITED; + typedef SkView INHERITED; }; void application_init() { @@ -42,6 +35,7 @@ void application_init() { } void application_term() { + SkGraphics::Term(); SkEvent::Term(); } diff --git a/experimental/SkV8Example/SkV8Example.cpp b/experimental/SkV8Example/SkV8Example.cpp index 03a8826..d537fd4 100644 --- a/experimental/SkV8Example/SkV8Example.cpp +++ b/experimental/SkV8Example/SkV8Example.cpp @@ -40,6 +40,7 @@ void application_init() { void application_term() { SkEvent::Term(); + SkGraphics::Term(); } SkV8ExampleWindow::SkV8ExampleWindow(void* hwnd, JsContext* context) diff --git a/include/core/SkGraphics.h b/include/core/SkGraphics.h index e9c5af5..8e8bd77 100644 --- a/include/core/SkGraphics.h +++ b/include/core/SkGraphics.h @@ -23,8 +23,10 @@ public: */ static void Init(); - SK_ATTR_DEPRECATED("SkGraphics::Term() is a no-op. We're in the middle of cleaning it up.") - static void Term() {} + /** + * Call this to release any memory held privately, such as the font cache. + */ + static void Term(); /** * Return the version numbers for the library. If the parameter is not @@ -167,6 +169,9 @@ public: SkAutoGraphics() { SkGraphics::Init(); } + ~SkAutoGraphics() { + SkGraphics::Term(); + } }; #endif diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h index 2090ed2..0c071ad 100644 --- a/include/core/SkPaint.h +++ b/include/core/SkPaint.h @@ -289,7 +289,7 @@ public: SkFilterQuality getFilterQuality() const { return (SkFilterQuality)fBitfields.fFilterQuality; } - + /** * Set the filter quality. This affects the quality (and performance) of * drawing scaled images. @@ -1046,6 +1046,8 @@ private: */ SkColor computeLuminanceColor() const; + static void Term(); + enum { /* This is the size we use when we ask for a glyph's path. We then * post-transform it as we draw to match the request. @@ -1088,6 +1090,7 @@ private: friend class SkAutoGlyphCacheNoGamma; friend class SkCanvas; friend class SkDraw; + friend class SkGraphics; // So Term() can be called. friend class SkPDFDevice; friend class GrBitmapTextContext; friend class GrAtlasTextContext; diff --git a/include/views/SkEvent.h b/include/views/SkEvent.h index 0af76fe..f4df448 100644 --- a/include/views/SkEvent.h +++ b/include/views/SkEvent.h @@ -223,7 +223,7 @@ public: */ static void Init(); /** Global cleanup function for the SkEvent system. Should be called exactly once after - all event methods have been called. + all event methods have been called, and should be called before calling SkGraphics::Term(). */ static void Term(); diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index 02c5e03..22e8b8a 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -2397,4 +2397,5 @@ void application_init() { void application_term() { SkEvent::Term(); + SkGraphics::Term(); } diff --git a/src/core/SkGraphics.cpp b/src/core/SkGraphics.cpp index 5290ea1..e9dcadc 100644 --- a/src/core/SkGraphics.cpp +++ b/src/core/SkGraphics.cpp @@ -58,6 +58,12 @@ void SkGraphics::Init() { #endif } +void SkGraphics::Term() { + PurgeFontCache(); + PurgeResourceCache(); + SkPaint::Term(); +} + /////////////////////////////////////////////////////////////////////////////// void SkGraphics::DumpMemoryStatistics(SkTraceMemoryDump* dump) { diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp index e15c1a7..c109720 100644 --- a/src/core/SkPaint.cpp +++ b/src/core/SkPaint.cpp @@ -1525,6 +1525,18 @@ static const SkMaskGamma& cachedMaskGamma(SkScalar contrast, SkScalar paintGamma return *gMaskGamma; } +/*static*/ void SkPaint::Term() { + SkAutoMutexAcquire ama(gMaskGammaCacheMutex); + + SkSafeUnref(gLinearMaskGamma); + gLinearMaskGamma = nullptr; + SkSafeUnref(gMaskGamma); + gMaskGamma = nullptr; + SkDEBUGCODE(gContrast = SK_ScalarMin;) + SkDEBUGCODE(gPaintGamma = SK_ScalarMin;) + SkDEBUGCODE(gDeviceGamma = SK_ScalarMin;) +} + /** * We ensure that the rec is self-consistent and efficient (where possible) */ diff --git a/tests/PathOpsSkpClipTest.cpp b/tests/PathOpsSkpClipTest.cpp index 7b63c1c..edc79d1 100644 --- a/tests/PathOpsSkpClipTest.cpp +++ b/tests/PathOpsSkpClipTest.cpp @@ -1102,6 +1102,7 @@ int tool_main(int argc, char** argv) { test->run(); } } + SkGraphics::Term(); return 0; } diff --git a/tools/VisualBench/VisualBench.cpp b/tools/VisualBench/VisualBench.cpp index 3c41204..7b90266 100644 --- a/tools/VisualBench/VisualBench.cpp +++ b/tools/VisualBench/VisualBench.cpp @@ -114,6 +114,7 @@ void application_init() { void application_term() { SkEvent::Term(); + SkGraphics::Term(); } SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) { diff --git a/tools/filtermain.cpp b/tools/filtermain.cpp index 24f0c78..1ed9797 100644 --- a/tools/filtermain.cpp +++ b/tools/filtermain.cpp @@ -794,6 +794,7 @@ int tool_main(int argc, char** argv) { SkDebugf("opt %d: %d\n", opt, gOptTable[opt].fNumTimesApplied); } + SkGraphics::Term(); return 0; } diff --git a/tools/iOSShell.cpp b/tools/iOSShell.cpp index 02884c8..1f5f2da 100644 --- a/tools/iOSShell.cpp +++ b/tools/iOSShell.cpp @@ -96,4 +96,5 @@ void application_init() { void application_term(); void application_term() { SkEvent::Term(); + SkGraphics::Term(); } -- 2.7.4