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

Commit 087bc0c1 authored by John Reck's avatar John Reck
Browse files

Refcount RenderNode

Change-Id: I7a86db8acc2b78ef33d987a43a119f5933d7d752
parent ce16215d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -59,13 +59,14 @@ static void android_view_RenderNode_output(JNIEnv* env,

static jlong android_view_RenderNode_create(JNIEnv* env, jobject clazz) {
    RenderNode* displayList = new RenderNode();
    displayList->incStrong(0);
    return reinterpret_cast<jlong>(displayList);
}

static void android_view_RenderNode_destroyDisplayList(JNIEnv* env,
        jobject clazz, jlong displayListPtr) {
    RenderNode* displayList = reinterpret_cast<RenderNode*>(displayListPtr);
    RenderNode::destroyDisplayListDeferred(displayList);
    displayList->decStrong(0);
}

// ----------------------------------------------------------------------------
+1 −15
Original line number Diff line number Diff line
@@ -315,24 +315,15 @@ void Caches::clearGarbage() {
    pathCache.clearGarbage();
    patchCache.clearGarbage();

    Vector<RenderNode*> displayLists;
    Vector<Layer*> layers;

    { // scope for the lock
        Mutex::Autolock _l(mGarbageLock);
        displayLists = mDisplayListGarbage;
        layers = mLayerGarbage;
        mDisplayListGarbage.clear();
        mLayerGarbage.clear();
    }

    size_t count = displayLists.size();
    for (size_t i = 0; i < count; i++) {
        RenderNode* displayList = displayLists.itemAt(i);
        delete displayList;
    }

    count = layers.size();
    size_t count = layers.size();
    for (size_t i = 0; i < count; i++) {
        Layer* layer = layers.itemAt(i);
        delete layer;
@@ -345,11 +336,6 @@ void Caches::deleteLayerDeferred(Layer* layer) {
    mLayerGarbage.push(layer);
}

void Caches::deleteDisplayListDeferred(RenderNode* displayList) {
    Mutex::Autolock _l(mGarbageLock);
    mDisplayListGarbage.push(displayList);
}

void Caches::flush(FlushMode mode) {
    FLUSH_LOGD("Flushing caches (mode %d)", mode);

+0 −6
Original line number Diff line number Diff line
@@ -166,11 +166,6 @@ public:
     */
    void deleteLayerDeferred(Layer* layer);

    /*
     * Can be used to delete a display list from a non EGL thread.
     */
    void deleteDisplayListDeferred(RenderNode* layer);

    /**
     * Binds the VBO used to render simple textured quads.
     */
@@ -420,7 +415,6 @@ private:

    mutable Mutex mGarbageLock;
    Vector<Layer*> mLayerGarbage;
    Vector<RenderNode*> mDisplayListGarbage;

    DebugLevel mDebugLevel;
    bool mInitialized;
+2 −2
Original line number Diff line number Diff line
@@ -68,13 +68,13 @@ bool DeferredLayerUpdater::apply() {
    mLayer->setColorFilter(mColorFilter);
    mLayer->setAlpha(mAlpha, mMode);

    if (mDisplayList) {
    if (mDisplayList.get()) {
        if (mWidth != mLayer->layer.getWidth() || mHeight != mLayer->layer.getHeight()) {
            success = LayerRenderer::resizeLayer(mLayer, mWidth, mHeight);
        }
        mLayer->setBlend(mBlend);
        mDisplayList->updateProperties();
        mLayer->updateDeferred(mDisplayList,
        mLayer->updateDeferred(mDisplayList.get(),
                mDirtyRect.left, mDirtyRect.top, mDirtyRect.right, mDirtyRect.bottom);
        mDirtyRect.setEmpty();
        mDisplayList = 0;
+1 −1
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ private:
    // Layer type specific properties
    // displayList and surfaceTexture are mutually exclusive, only 1 may be set
    // dirtyRect is only valid if displayList is set
    RenderNode* mDisplayList;
    sp<RenderNode> mDisplayList;
    Rect mDirtyRect;
    sp<GLConsumer> mSurfaceTexture;
    SkMatrix* mTransform;
Loading