| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 }; | 91 }; |
| 92 | 92 |
| 93 } // anonymous namespace | 93 } // anonymous namespace |
| 94 | 94 |
| 95 class Canvas2DLayerBridgeTest : public Test { | 95 class Canvas2DLayerBridgeTest : public Test { |
| 96 public: | 96 public: |
| 97 PassRefPtr<Canvas2DLayerBridge> makeBridge( | 97 PassRefPtr<Canvas2DLayerBridge> makeBridge( |
| 98 std::unique_ptr<FakeWebGraphicsContext3DProvider> provider, | 98 std::unique_ptr<FakeWebGraphicsContext3DProvider> provider, |
| 99 const IntSize& size, | 99 const IntSize& size, |
| 100 Canvas2DLayerBridge::AccelerationMode accelerationMode) { | 100 Canvas2DLayerBridge::AccelerationMode accelerationMode) { |
| 101 RefPtr<Canvas2DLayerBridge> bridge = adoptRef(new Canvas2DLayerBridge( | 101 RefPtr<Canvas2DLayerBridge> bridge = adoptRef( |
| 102 std::move(provider), size, 0, NonOpaque, accelerationMode, nullptr)); | 102 new Canvas2DLayerBridge(std::move(provider), size, 0, NonOpaque, |
| 103 accelerationMode, nullptr, kN32_SkColorType)); |
| 103 bridge->dontUseIdleSchedulingForTesting(); | 104 bridge->dontUseIdleSchedulingForTesting(); |
| 104 return bridge.release(); | 105 return bridge.release(); |
| 105 } | 106 } |
| 106 | 107 |
| 107 protected: | 108 protected: |
| 108 void fullLifecycleTest() { | 109 void fullLifecycleTest() { |
| 109 FakeGLES2Interface gl; | 110 FakeGLES2Interface gl; |
| 110 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 111 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 111 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 112 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 112 | 113 |
| 113 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 114 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 114 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 115 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
| 115 Canvas2DLayerBridge::DisableAcceleration, nullptr))); | 116 Canvas2DLayerBridge::DisableAcceleration, nullptr, kN32_SkColorType))); |
| 116 | 117 |
| 117 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureInfo( | 118 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureInfo( |
| 118 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests) | 119 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests) |
| 119 ->getTextureHandle(true)); | 120 ->getTextureHandle(true)); |
| 120 EXPECT_EQ(textureInfo, nullptr); | 121 EXPECT_EQ(textureInfo, nullptr); |
| 121 bridge.clear(); | 122 bridge.clear(); |
| 122 } | 123 } |
| 123 | 124 |
| 124 void fallbackToSoftwareIfContextLost() { | 125 void fallbackToSoftwareIfContextLost() { |
| 125 FakeGLES2Interface gl; | 126 FakeGLES2Interface gl; |
| 126 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 127 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 127 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 128 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 128 | 129 |
| 129 gl.setIsContextLost(true); | 130 gl.setIsContextLost(true); |
| 130 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 131 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 131 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 132 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
| 132 Canvas2DLayerBridge::EnableAcceleration, nullptr))); | 133 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
| 133 EXPECT_TRUE(bridge->checkSurfaceValid()); | 134 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 134 EXPECT_FALSE(bridge->isAccelerated()); | 135 EXPECT_FALSE(bridge->isAccelerated()); |
| 135 } | 136 } |
| 136 | 137 |
| 137 void fallbackToSoftwareOnFailedTextureAlloc() { | 138 void fallbackToSoftwareOnFailedTextureAlloc() { |
| 138 { | 139 { |
| 139 // No fallback case. | 140 // No fallback case. |
| 140 FakeGLES2Interface gl; | 141 FakeGLES2Interface gl; |
| 141 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 142 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 142 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 143 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 143 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 144 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 144 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 145 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
| 145 Canvas2DLayerBridge::EnableAcceleration, nullptr))); | 146 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
| 146 EXPECT_TRUE(bridge->checkSurfaceValid()); | 147 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 147 EXPECT_TRUE(bridge->isAccelerated()); | 148 EXPECT_TRUE(bridge->isAccelerated()); |
| 148 sk_sp<SkImage> snapshot = | 149 sk_sp<SkImage> snapshot = |
| 149 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); | 150 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); |
| 150 EXPECT_TRUE(bridge->isAccelerated()); | 151 EXPECT_TRUE(bridge->isAccelerated()); |
| 151 EXPECT_TRUE(snapshot->isTextureBacked()); | 152 EXPECT_TRUE(snapshot->isTextureBacked()); |
| 152 } | 153 } |
| 153 | 154 |
| 154 { | 155 { |
| 155 // Fallback case. | 156 // Fallback case. |
| 156 FakeGLES2Interface gl; | 157 FakeGLES2Interface gl; |
| 157 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 158 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 158 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 159 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 159 GrContext* gr = contextProvider->grContext(); | 160 GrContext* gr = contextProvider->grContext(); |
| 160 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 161 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 161 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 162 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
| 162 Canvas2DLayerBridge::EnableAcceleration, nullptr))); | 163 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
| 163 EXPECT_TRUE(bridge->checkSurfaceValid()); | 164 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 164 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that | 165 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that |
| 165 // allocation will fail. | 166 // allocation will fail. |
| 166 // This will cause SkSurface_Gpu creation to fail without | 167 // This will cause SkSurface_Gpu creation to fail without |
| 167 // Canvas2DLayerBridge otherwise detecting that anything was disabled. | 168 // Canvas2DLayerBridge otherwise detecting that anything was disabled. |
| 168 gr->abandonContext(); | 169 gr->abandonContext(); |
| 169 sk_sp<SkImage> snapshot = | 170 sk_sp<SkImage> snapshot = |
| 170 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); | 171 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); |
| 171 EXPECT_FALSE(bridge->isAccelerated()); | 172 EXPECT_FALSE(bridge->isAccelerated()); |
| 172 EXPECT_FALSE(snapshot->isTextureBacked()); | 173 EXPECT_FALSE(snapshot->isTextureBacked()); |
| 173 } | 174 } |
| 174 } | 175 } |
| 175 | 176 |
| 176 void noDrawOnContextLostTest() { | 177 void noDrawOnContextLostTest() { |
| 177 FakeGLES2Interface gl; | 178 FakeGLES2Interface gl; |
| 178 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 179 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 179 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 180 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 180 | 181 |
| 181 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 182 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 182 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 183 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
| 183 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr))); | 184 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
| 185 kN32_SkColorType))); |
| 184 EXPECT_TRUE(bridge->checkSurfaceValid()); | 186 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 185 SkPaint paint; | 187 SkPaint paint; |
| 186 uint32_t genID = bridge->getOrCreateSurface()->generationID(); | 188 uint32_t genID = bridge->getOrCreateSurface()->generationID(); |
| 187 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 189 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 188 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 190 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
| 189 gl.setIsContextLost(true); | 191 gl.setIsContextLost(true); |
| 190 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 192 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
| 191 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 193 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 192 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 194 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
| 193 // This results in the internal surface being torn down in response to the | 195 // This results in the internal surface being torn down in response to the |
| 194 // context loss. | 196 // context loss. |
| 195 EXPECT_FALSE(bridge->checkSurfaceValid()); | 197 EXPECT_FALSE(bridge->checkSurfaceValid()); |
| 196 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); | 198 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); |
| 197 // The following passes by not crashing | 199 // The following passes by not crashing |
| 198 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 200 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 199 bridge->flush(); | 201 bridge->flush(); |
| 200 } | 202 } |
| 201 | 203 |
| 202 void prepareMailboxWhenContextIsLost() { | 204 void prepareMailboxWhenContextIsLost() { |
| 203 FakeGLES2Interface gl; | 205 FakeGLES2Interface gl; |
| 204 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 206 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 205 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 207 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 206 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 208 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 207 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 209 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
| 208 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr))); | 210 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
| 211 kN32_SkColorType))); |
| 209 | 212 |
| 210 // TODO(junov): The PrepareTextureMailbox() method will fail a DCHECK if we | 213 // TODO(junov): The PrepareTextureMailbox() method will fail a DCHECK if we |
| 211 // don't do this before calling it the first time when the context is lost. | 214 // don't do this before calling it the first time when the context is lost. |
| 212 bridge->prepareSurfaceForPaintingIfNeeded(); | 215 bridge->prepareSurfaceForPaintingIfNeeded(); |
| 213 | 216 |
| 214 // When the context is lost we are not sure if we should still be producing | 217 // When the context is lost we are not sure if we should still be producing |
| 215 // GL frames for the compositor or not, so fail to generate frames. | 218 // GL frames for the compositor or not, so fail to generate frames. |
| 216 gl.setIsContextLost(true); | 219 gl.setIsContextLost(true); |
| 217 | 220 |
| 218 cc::TextureMailbox textureMailbox; | 221 cc::TextureMailbox textureMailbox; |
| 219 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 222 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
| 220 EXPECT_FALSE( | 223 EXPECT_FALSE( |
| 221 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); | 224 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); |
| 222 } | 225 } |
| 223 | 226 |
| 224 void prepareMailboxAndLoseResourceTest() { | 227 void prepareMailboxAndLoseResourceTest() { |
| 225 // Prepare a mailbox, then report the resource as lost. | 228 // Prepare a mailbox, then report the resource as lost. |
| 226 // This test passes by not crashing and not triggering assertions. | 229 // This test passes by not crashing and not triggering assertions. |
| 227 { | 230 { |
| 228 FakeGLES2Interface gl; | 231 FakeGLES2Interface gl; |
| 229 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 232 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 230 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 233 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 231 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 234 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 232 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 235 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
| 233 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr))); | 236 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
| 237 kN32_SkColorType))); |
| 234 | 238 |
| 235 cc::TextureMailbox textureMailbox; | 239 cc::TextureMailbox textureMailbox; |
| 236 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 240 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
| 237 EXPECT_TRUE( | 241 EXPECT_TRUE( |
| 238 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); | 242 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); |
| 239 | 243 |
| 240 bool lostResource = true; | 244 bool lostResource = true; |
| 241 releaseCallback->Run(gpu::SyncToken(), lostResource); | 245 releaseCallback->Run(gpu::SyncToken(), lostResource); |
| 242 } | 246 } |
| 243 | 247 |
| 244 // Retry with mailbox released while bridge destruction is in progress. | 248 // Retry with mailbox released while bridge destruction is in progress. |
| 245 { | 249 { |
| 246 FakeGLES2Interface gl; | 250 FakeGLES2Interface gl; |
| 247 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 251 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 248 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 252 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 249 | 253 |
| 250 cc::TextureMailbox textureMailbox; | 254 cc::TextureMailbox textureMailbox; |
| 251 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 255 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
| 252 | 256 |
| 253 { | 257 { |
| 254 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 258 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 255 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 259 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
| 256 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr))); | 260 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
| 261 kN32_SkColorType))); |
| 257 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback); | 262 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback); |
| 258 // |bridge| goes out of scope and would normally be destroyed, but | 263 // |bridge| goes out of scope and would normally be destroyed, but |
| 259 // object is kept alive by self references. | 264 // object is kept alive by self references. |
| 260 } | 265 } |
| 261 | 266 |
| 262 // This should cause the bridge to be destroyed. | 267 // This should cause the bridge to be destroyed. |
| 263 bool lostResource = true; | 268 bool lostResource = true; |
| 264 // Before fixing crbug.com/411864, the following line would cause a memory | 269 // Before fixing crbug.com/411864, the following line would cause a memory |
| 265 // use after free that sometimes caused a crash in normal builds and | 270 // use after free that sometimes caused a crash in normal builds and |
| 266 // crashed consistently with ASAN. | 271 // crashed consistently with ASAN. |
| 267 releaseCallback->Run(gpu::SyncToken(), lostResource); | 272 releaseCallback->Run(gpu::SyncToken(), lostResource); |
| 268 } | 273 } |
| 269 } | 274 } |
| 270 | 275 |
| 271 void accelerationHintTest() { | 276 void accelerationHintTest() { |
| 272 { | 277 { |
| 273 FakeGLES2Interface gl; | 278 FakeGLES2Interface gl; |
| 274 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 279 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 275 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 280 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 276 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 281 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 277 std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, | 282 std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, |
| 278 Canvas2DLayerBridge::EnableAcceleration, nullptr))); | 283 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
| 279 SkPaint paint; | 284 SkPaint paint; |
| 280 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 285 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 281 sk_sp<SkImage> image = | 286 sk_sp<SkImage> image = |
| 282 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); | 287 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); |
| 283 EXPECT_TRUE(bridge->checkSurfaceValid()); | 288 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 284 EXPECT_TRUE(bridge->isAccelerated()); | 289 EXPECT_TRUE(bridge->isAccelerated()); |
| 285 } | 290 } |
| 286 | 291 |
| 287 { | 292 { |
| 288 FakeGLES2Interface gl; | 293 FakeGLES2Interface gl; |
| 289 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 294 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
| 290 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 295 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
| 291 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 296 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
| 292 std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, | 297 std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, |
| 293 Canvas2DLayerBridge::EnableAcceleration, nullptr))); | 298 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
| 294 SkPaint paint; | 299 SkPaint paint; |
| 295 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 300 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 296 sk_sp<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleration, | 301 sk_sp<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleration, |
| 297 SnapshotReasonUnitTests); | 302 SnapshotReasonUnitTests); |
| 298 EXPECT_TRUE(bridge->checkSurfaceValid()); | 303 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 299 EXPECT_FALSE(bridge->isAccelerated()); | 304 EXPECT_FALSE(bridge->isAccelerated()); |
| 300 } | 305 } |
| 301 } | 306 } |
| 302 }; | 307 }; |
| 303 | 308 |
| (...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1210 EXPECT_FALSE( | 1215 EXPECT_FALSE( |
| 1211 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); | 1216 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); |
| 1212 EXPECT_TRUE(bridge->checkSurfaceValid()); | 1217 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 1213 | 1218 |
| 1214 // Tear down the bridge on the thread so that 'bridge' can go out of scope | 1219 // Tear down the bridge on the thread so that 'bridge' can go out of scope |
| 1215 // without crashing due to thread checks | 1220 // without crashing due to thread checks |
| 1216 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1221 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
| 1217 } | 1222 } |
| 1218 | 1223 |
| 1219 } // namespace blink | 1224 } // namespace blink |
| OLD | NEW |