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

Commit 96c637e9 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Refcount RenderNode"

parents 8ea553d0 087bc0c1
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