Skip Texture::syncState when no dirty bits.

We sometimes generate local dirty bits in TextureGL. To make sure the local
dirty bits don't get skipped we use a Subject/Observer pattern between the
TextureGL and gl::Texture. This allows us to skip syncState in the hot path.

Also inlines a couple of other texture functions. And fixes a stray header
in EGLBlobCacheTest.

Bug: angleproject:2763
Change-Id: Ie1d8a5865deaf2a563a358c31ae28bef6b2458b1
Reviewed-on: https://chromium-review.googlesource.com/1228374
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
diff --git a/src/libANGLE/Framebuffer.cpp b/src/libANGLE/Framebuffer.cpp
index 12e805f..f2a7dec 100644
--- a/src/libANGLE/Framebuffer.cpp
+++ b/src/libANGLE/Framebuffer.cpp
@@ -1828,7 +1828,12 @@
                                        angle::SubjectIndex index,
                                        angle::SubjectMessage message)
 {
-    ASSERT(message == angle::SubjectMessage::STORAGE_CHANGED);
+    if (message != angle::SubjectMessage::STORAGE_CHANGED)
+    {
+        // This can be triggered by the GL back-end TextureGL class.
+        ASSERT(message == angle::SubjectMessage::DEPENDENT_DIRTY_BITS);
+        return;
+    }
 
     ASSERT(!mDirtyBitsGuard.valid() || mDirtyBitsGuard.value().test(index));
     mDirtyBits.set(index);