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
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 @@
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_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 @@
// 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 @@
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 @@
}
private:
- typedef SkView INHERITED;
+ typedef SkView INHERITED;
};
void application_init();
@@ -194,12 +194,12 @@
path.hasRectangularInterior(©);
SkDebugf("</div>\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 @@
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_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 @@
canvas->drawRect(r, p);
}
private:
- typedef SkView INHERITED;
+ typedef SkView INHERITED;
};
void application_init() {
@@ -42,6 +35,7 @@
}
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_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 @@
*/
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 @@
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 @@
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 @@
*/
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 @@
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 @@
*/
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_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 @@
#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 @@
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 @@
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_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 @@
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_term();
void application_term() {
SkEvent::Term();
+ SkGraphics::Term();
}