[Webkit-unassigned] [Bug 95057] [chromium] Allow impl-thread deletion of only some resources

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Aug 27 11:34:42 PDT 2012


https://bugs.webkit.org/show_bug.cgi?id=95057





--- Comment #5 from Antoine Labour <piman at chromium.org>  2012-08-27 11:34:44 PST ---
(From update of attachment 160669)
View in context: https://bugs.webkit.org/attachment.cgi?id=160669&action=review

> Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.cpp:120
> +        return m_backing->resourceDeleted();

Isn't this racy if the m_backingsMutex in the manager isn't held?

> Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:230
> +            resourceProvider->deleteResource((*it)->id());

What if resourceProvider is NULL? Or, if the semantics have changed to not allow NULL anymore, mind adding an assert to make that clear?

> Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:271
> +                resourcesToDelete.append((*it)->id());

It would be good to reset the resource ID here, making it harder to accidentally use a stale resource id.

> Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:352
> +    ASSERT(backing->resourceDeleted() || !backing->owner() || !backing->owner()->isAbovePriorityCutoff());

since backing->resourceDeleted() has to be true (since you're asserting below), !backing->owner() || !backing->owner()->isAbovePriorityCutoff() is never tested. Should it be tested separately? Is it not true anymore?

> Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:143
> +    BackingSet m_backingsFreedByImplThread;

TBH a vector is just as good, and cheaper memory and time complexity-wise. You'll never add the same backing to this set twice, correct?

> Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:151
> +    Mutex m_backingsMutex;

I think we should be clear what is protected by this mutex and what is not. It looks to me that what is actually protected by the mutex is:
- m_backings
- m_backingsFreedByImplThread
- the contents of each Backing in m_backings (in particular the m_resourceDeleted flag and the resource ID).
(basically anything that is accessed by deleteBackingsResourcesOnImplThread while the mutex is held).

Among others, what is not protected by this is:
- m_textures
- texture->backing() for each texture in m_texture.
It's important to note, so that we don't try to take the mutex in various operations and expect to be safe - we need the higher level notion of blocked main thread to ensure safety.

> Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdateQueue.cpp:69
> +        if (!upload.texture->backingWasAsynchronouslyDeleted())

Isn't this racy if the m_backingsMutex isn't held?

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the webkit-unassigned mailing list