OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 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 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "SkSurface.h" | 32 #include "SkSurface.h" |
33 #include "core/platform/graphics/GraphicsContext3D.h" | 33 #include "core/platform/graphics/GraphicsContext3D.h" |
34 #include "core/platform/graphics/GraphicsLayer.h" | 34 #include "core/platform/graphics/GraphicsLayer.h" |
35 #include "core/platform/graphics/chromium/Canvas2DLayerManager.h" | 35 #include "core/platform/graphics/chromium/Canvas2DLayerManager.h" |
36 #include "core/platform/graphics/gpu/SharedGraphicsContext3D.h" | 36 #include "core/platform/graphics/gpu/SharedGraphicsContext3D.h" |
37 #include "platform/TraceEvent.h" | 37 #include "platform/TraceEvent.h" |
38 #include "public/platform/Platform.h" | 38 #include "public/platform/Platform.h" |
39 #include "public/platform/WebCompositorSupport.h" | 39 #include "public/platform/WebCompositorSupport.h" |
40 #include "public/platform/WebGraphicsContext3D.h" | 40 #include "public/platform/WebGraphicsContext3D.h" |
41 | 41 |
42 using WebKit::WebExternalTextureLayer; | 42 using blink::WebExternalTextureLayer; |
43 using WebKit::WebGraphicsContext3D; | 43 using blink::WebGraphicsContext3D; |
44 | 44 |
45 namespace WebCore { | 45 namespace WebCore { |
46 | 46 |
47 void Canvas2DLayerBridgePtr::clear() | 47 void Canvas2DLayerBridgePtr::clear() |
48 { | 48 { |
49 if (m_ptr) { | 49 if (m_ptr) { |
50 m_ptr->destroy(); | 50 m_ptr->destroy(); |
51 m_ptr.clear(); | 51 m_ptr.clear(); |
52 } | 52 } |
53 } | 53 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 , m_framesPending(0) | 96 , m_framesPending(0) |
97 , m_destructionInProgress(false) | 97 , m_destructionInProgress(false) |
98 , m_rateLimitingEnabled(false) | 98 , m_rateLimitingEnabled(false) |
99 , m_next(0) | 99 , m_next(0) |
100 , m_prev(0) | 100 , m_prev(0) |
101 , m_lastImageId(0) | 101 , m_lastImageId(0) |
102 { | 102 { |
103 ASSERT(m_canvas); | 103 ASSERT(m_canvas); |
104 // Used by browser tests to detect the use of a Canvas2DLayerBridge. | 104 // Used by browser tests to detect the use of a Canvas2DLayerBridge. |
105 TRACE_EVENT_INSTANT0("test_gpu", "Canvas2DLayerBridgeCreation"); | 105 TRACE_EVENT_INSTANT0("test_gpu", "Canvas2DLayerBridgeCreation"); |
106 m_layer = adoptPtr(WebKit::Platform::current()->compositorSupport()->createE
xternalTextureLayer(this)); | 106 m_layer = adoptPtr(blink::Platform::current()->compositorSupport()->createEx
ternalTextureLayer(this)); |
107 m_layer->setOpaque(opacityMode == Opaque); | 107 m_layer->setOpaque(opacityMode == Opaque); |
108 m_layer->setBlendBackgroundColor(opacityMode != Opaque); | 108 m_layer->setBlendBackgroundColor(opacityMode != Opaque); |
109 GraphicsLayer::registerContentsLayer(m_layer->layer()); | 109 GraphicsLayer::registerContentsLayer(m_layer->layer()); |
110 m_layer->setRateLimitContext(m_rateLimitingEnabled); | 110 m_layer->setRateLimitContext(m_rateLimitingEnabled); |
111 m_canvas->setNotificationClient(this); | 111 m_canvas->setNotificationClient(this); |
112 } | 112 } |
113 | 113 |
114 Canvas2DLayerBridge::~Canvas2DLayerBridge() | 114 Canvas2DLayerBridge::~Canvas2DLayerBridge() |
115 { | 115 { |
116 ASSERT(m_destructionInProgress); | 116 ASSERT(m_destructionInProgress); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 // trigger subsequent retry. | 268 // trigger subsequent retry. |
269 m_surfaceIsValid = false; | 269 m_surfaceIsValid = false; |
270 } | 270 } |
271 } | 271 } |
272 } | 272 } |
273 if (!m_surfaceIsValid) | 273 if (!m_surfaceIsValid) |
274 setRateLimitingEnabled(false); | 274 setRateLimitingEnabled(false); |
275 return m_surfaceIsValid; | 275 return m_surfaceIsValid; |
276 } | 276 } |
277 | 277 |
278 bool Canvas2DLayerBridge::prepareMailbox(WebKit::WebExternalTextureMailbox* outM
ailbox, WebKit::WebExternalBitmap* bitmap) | 278 bool Canvas2DLayerBridge::prepareMailbox(blink::WebExternalTextureMailbox* outMa
ilbox, blink::WebExternalBitmap* bitmap) |
279 { | 279 { |
280 if (bitmap) { | 280 if (bitmap) { |
281 // Using accelerated 2d canvas with software renderer, which | 281 // Using accelerated 2d canvas with software renderer, which |
282 // should only happen in tests that use fake graphics contexts. | 282 // should only happen in tests that use fake graphics contexts. |
283 // In this case, we do not care about producing any results for | 283 // In this case, we do not care about producing any results for |
284 // compositing. | 284 // compositing. |
285 m_canvas->silentFlush(); | 285 m_canvas->silentFlush(); |
286 return false; | 286 return false; |
287 } | 287 } |
288 if (!isValid()) | 288 if (!isValid()) |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 // means there is a problem. | 361 // means there is a problem. |
362 // For the single-threaded case, this value needs to be at least | 362 // For the single-threaded case, this value needs to be at least |
363 // kMaxSwapBuffersPending+1 (in render_widget.h). | 363 // kMaxSwapBuffersPending+1 (in render_widget.h). |
364 // Because of crbug.com/247874, it needs to be kMaxSwapBuffersPending+2. | 364 // Because of crbug.com/247874, it needs to be kMaxSwapBuffersPending+2. |
365 // TODO(piman): fix this. | 365 // TODO(piman): fix this. |
366 ASSERT(m_mailboxes.size() <= 4); | 366 ASSERT(m_mailboxes.size() <= 4); |
367 ASSERT(mailboxInfo < m_mailboxes.end()); | 367 ASSERT(mailboxInfo < m_mailboxes.end()); |
368 return mailboxInfo; | 368 return mailboxInfo; |
369 } | 369 } |
370 | 370 |
371 void Canvas2DLayerBridge::mailboxReleased(const WebKit::WebExternalTextureMailbo
x& mailbox) | 371 void Canvas2DLayerBridge::mailboxReleased(const blink::WebExternalTextureMailbox
& mailbox) |
372 { | 372 { |
373 Vector<MailboxInfo>::iterator mailboxInfo; | 373 Vector<MailboxInfo>::iterator mailboxInfo; |
374 for (mailboxInfo = m_mailboxes.begin(); mailboxInfo < m_mailboxes.end(); mai
lboxInfo++) { | 374 for (mailboxInfo = m_mailboxes.begin(); mailboxInfo < m_mailboxes.end(); mai
lboxInfo++) { |
375 if (!memcmp(mailboxInfo->m_mailbox.name, mailbox.name, sizeof(mailbox.na
me))) { | 375 if (!memcmp(mailboxInfo->m_mailbox.name, mailbox.name, sizeof(mailbox.na
me))) { |
376 mailboxInfo->m_mailbox.syncPoint = mailbox.syncPoint; | 376 mailboxInfo->m_mailbox.syncPoint = mailbox.syncPoint; |
377 ASSERT(mailboxInfo->m_status == MailboxInUse); | 377 ASSERT(mailboxInfo->m_status == MailboxInUse); |
378 mailboxInfo->m_status = MailboxReleased; | 378 mailboxInfo->m_status = MailboxReleased; |
379 // Trigger Canvas2DLayerBridge self-destruction if this is the | 379 // Trigger Canvas2DLayerBridge self-destruction if this is the |
380 // last live mailbox and the layer bridge is not externally | 380 // last live mailbox and the layer bridge is not externally |
381 // referenced. | 381 // referenced. |
382 ASSERT(mailboxInfo->m_parentLayerBridge.get() == this); | 382 ASSERT(mailboxInfo->m_parentLayerBridge.get() == this); |
383 mailboxInfo->m_parentLayerBridge.clear(); | 383 mailboxInfo->m_parentLayerBridge.clear(); |
384 return; | 384 return; |
385 } | 385 } |
386 } | 386 } |
387 } | 387 } |
388 | 388 |
389 WebKit::WebLayer* Canvas2DLayerBridge::layer() | 389 blink::WebLayer* Canvas2DLayerBridge::layer() |
390 { | 390 { |
391 ASSERT(m_layer); | 391 ASSERT(m_layer); |
392 return m_layer->layer(); | 392 return m_layer->layer(); |
393 } | 393 } |
394 | 394 |
395 void Canvas2DLayerBridge::contextAcquired() | 395 void Canvas2DLayerBridge::contextAcquired() |
396 { | 396 { |
397 ASSERT(!m_destructionInProgress); | 397 ASSERT(!m_destructionInProgress); |
398 Canvas2DLayerManager::get().layerDidDraw(this); | 398 Canvas2DLayerManager::get().layerDidDraw(this); |
399 m_didRecordDrawCommand = true; | 399 m_didRecordDrawCommand = true; |
(...skipping 17 matching lines...) Expand all Loading... |
417 Canvas2DLayerBridge::MailboxInfo::MailboxInfo(const MailboxInfo& other) { | 417 Canvas2DLayerBridge::MailboxInfo::MailboxInfo(const MailboxInfo& other) { |
418 // This copy constructor should only be used for Vector reallocation | 418 // This copy constructor should only be used for Vector reallocation |
419 // Assuming 'other' is to be destroyed, we swap m_image ownership | 419 // Assuming 'other' is to be destroyed, we swap m_image ownership |
420 // rather than do a refcount dance. | 420 // rather than do a refcount dance. |
421 memcpy(&m_mailbox, &other.m_mailbox, sizeof(m_mailbox)); | 421 memcpy(&m_mailbox, &other.m_mailbox, sizeof(m_mailbox)); |
422 m_image.swap(const_cast<SkAutoTUnref<SkImage>*>(&other.m_image)); | 422 m_image.swap(const_cast<SkAutoTUnref<SkImage>*>(&other.m_image)); |
423 m_status = other.m_status; | 423 m_status = other.m_status; |
424 } | 424 } |
425 | 425 |
426 } | 426 } |
OLD | NEW |