OSDN Git Service

Syncronize pdfium initialization between users.
authorPhilip P. Moltmann <moltmann@google.com>
Wed, 27 Apr 2016 16:46:48 +0000 (09:46 -0700)
committerPhilip P. Moltmann <moltmann@google.com>
Wed, 27 Apr 2016 17:13:16 +0000 (10:13 -0700)
Only initalize pdfium once per process and only destroy it once all
users are gone.

Bug: 283878832837030928388184
Change-Id: I41e8f6da247a7cfab5fb9d159c047293719192c3

core/jni/android/graphics/pdf/PdfEditor.cpp
core/jni/android/graphics/pdf/PdfRenderer.cpp

index 2c840bd..d2d39cd 100644 (file)
@@ -51,22 +51,22 @@ static struct {
     jfieldID bottom;
 } gRectClassInfo;
 
-static Mutex sLock;
-
-static int sUnmatchedInitRequestCount = 0;
+// Also used in PdfRenderer.cpp
+Mutex sPdfiumLock;
+int sUnmatchedPdfiumInitRequestCount = 0;
 
 static void initializeLibraryIfNeeded() {
-    Mutex::Autolock _l(sLock);
-    if (sUnmatchedInitRequestCount == 0) {
+    Mutex::Autolock _l(sPdfiumLock);
+    if (sUnmatchedPdfiumInitRequestCount == 0) {
         FPDF_InitLibrary();
     }
-    sUnmatchedInitRequestCount++;
+    sUnmatchedPdfiumInitRequestCount++;
 }
 
 static void destroyLibraryIfNeeded() {
-    Mutex::Autolock _l(sLock);
-    sUnmatchedInitRequestCount--;
-    if (sUnmatchedInitRequestCount == 0) {
+    Mutex::Autolock _l(sPdfiumLock);
+    sUnmatchedPdfiumInitRequestCount--;
+    if (sUnmatchedPdfiumInitRequestCount == 0) {
        FPDF_DestroyLibrary();
     }
 }
index 27f3493..71bec78 100644 (file)
@@ -43,22 +43,22 @@ static struct {
     jfieldID y;
 } gPointClassInfo;
 
-static Mutex sLock;
-
-static int sUnmatchedInitRequestCount = 0;
+// See PdfEditor.cpp
+extern Mutex sPdfiumLock;
+extern int sUnmatchedPdfiumInitRequestCount;
 
 static void initializeLibraryIfNeeded() {
-    Mutex::Autolock _l(sLock);
-    if (sUnmatchedInitRequestCount == 0) {
+    Mutex::Autolock _l(sPdfiumLock);
+    if (sUnmatchedPdfiumInitRequestCount == 0) {
         FPDF_InitLibrary();
     }
-    sUnmatchedInitRequestCount++;
+    sUnmatchedPdfiumInitRequestCount++;
 }
 
 static void destroyLibraryIfNeeded() {
-    Mutex::Autolock _l(sLock);
-    sUnmatchedInitRequestCount--;
-    if (sUnmatchedInitRequestCount == 0) {
+    Mutex::Autolock _l(sPdfiumLock);
+    sUnmatchedPdfiumInitRequestCount--;
+    if (sUnmatchedPdfiumInitRequestCount == 0) {
        FPDF_DestroyLibrary();
     }
 }