aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@google.com>2015-09-09 07:22:09 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-09 07:22:09 -0700
commitd9b8d7ac1fb4628f3411253c0fc6cd37e4ff0487 (patch)
tree0fb1483f5d9a875bd6349aa1ea8cf3e09cefa132
parent2ac6793efc9b33f6104f9c39810bee5714bdc208 (diff)
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
-rw-r--r--debugger/debuggermain.cpp1
-rw-r--r--example/HelloWorld.cpp1
-rw-r--r--experimental/SimpleCocoaApp/SimpleApp.mm15
-rw-r--r--experimental/SimpleiOSApp/SimpleApp.mm10
-rw-r--r--experimental/SkV8Example/SkV8Example.cpp1
-rw-r--r--include/core/SkGraphics.h9
-rw-r--r--include/core/SkPaint.h5
-rw-r--r--include/views/SkEvent.h2
-rw-r--r--samplecode/SampleApp.cpp1
-rw-r--r--src/core/SkGraphics.cpp6
-rw-r--r--src/core/SkPaint.cpp12
-rw-r--r--tests/PathOpsSkpClipTest.cpp1
-rw-r--r--tools/VisualBench/VisualBench.cpp1
-rw-r--r--tools/filtermain.cpp1
-rw-r--r--tools/iOSShell.cpp1
15 files changed, 48 insertions, 19 deletions
diff --git a/debugger/debuggermain.cpp b/debugger/debuggermain.cpp
index eebcd5f3f1..0aec02b9b2 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 0d12d0fb04..495d2af598 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 95684c1683..6f9958f7fc 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(&copy);
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 @@ 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 123449f4e6..040472cfe3 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 03a8826c88..d537fd4d38 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 e9c5af511e..8e8bd77ef4 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 2090ed2337..0c071ad361 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 0af76fe686..f4df4482bf 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 02c5e036a1..22e8b8aa1c 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 5290ea1d07..e9dcadc180 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 e15c1a74db..c1097204c4 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 7b63c1cda7..edc79d18e6 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 3c4120469b..7b90266677 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 24f0c78c02..1ed9797396 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 02884c8e11..1f5f2da229 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();
}