Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a26b9b94 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix leak/crash in exit"

parents 18d6d788 6104cea3
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@
namespace android::uirenderer {

static std::mutex sLock{};
static ThreadBase* sUploadThread = nullptr;
static sp<ThreadBase> sUploadThread = nullptr;
static renderthread::EglManager sEglManager;
static int sPendingUploads = 0;
static nsecs_t sLastUpload = 0;
@@ -257,4 +257,15 @@ sk_sp<Bitmap> HardwareBitmapUploader::allocateHardwareBitmap(const SkBitmap& sou
                              Bitmap::computePalette(bitmap));
}

void HardwareBitmapUploader::terminate() {
    std::lock_guard _lock{sLock};
    LOG_ALWAYS_FATAL_IF(sPendingUploads, "terminate called while uploads in progress");
    if (sUploadThread) {
        sUploadThread->requestExit();
        sUploadThread->join();
        sUploadThread = nullptr;
    }
    sEglManager.destroy();
}

}  // namespace android::uirenderer
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ namespace android::uirenderer {
class HardwareBitmapUploader {
public:
    static sk_sp<Bitmap> allocateHardwareBitmap(const SkBitmap& sourceBitmap);
    static void terminate();
};

}  // namespace android::uirenderer
+3 −1
Original line number Diff line number Diff line
@@ -93,7 +93,9 @@ EglManager::EglManager()
        , mHasWideColorGamutSupport(false) {}

EglManager::~EglManager() {
    destroy();
    if (hasEglContext()) {
        ALOGW("~EglManager() leaked an EGL context");
    }
}

void EglManager::initialize() {
+5 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@

#include "Properties.h"
#include "hwui/Typeface.h"
#include "HardwareBitmapUploader.h"
#include "renderthread/RenderProxy.h"

#include <benchmark/benchmark.h>
#include <getopt.h>
@@ -353,6 +355,9 @@ int main(int argc, char* argv[]) {
        gBenchmarkReporter->Finalize();
    }

    renderthread::RenderProxy::trimMemory(100);
    HardwareBitmapUploader::terminate();

    LeakChecker::checkForLeaks();
    return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@

namespace android::uirenderer {

class ThreadBase : protected Thread {
class ThreadBase : public Thread {
    PREVENT_COPY_AND_ASSIGN(ThreadBase);

public: