OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/layers/texture_layer.h" | 5 #include "cc/layers/texture_layer.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 | 50 |
51 namespace cc { | 51 namespace cc { |
52 namespace { | 52 namespace { |
53 | 53 |
54 gpu::Mailbox MailboxFromChar(char value) { | 54 gpu::Mailbox MailboxFromChar(char value) { |
55 gpu::Mailbox mailbox; | 55 gpu::Mailbox mailbox; |
56 memset(mailbox.name, value, sizeof(mailbox.name)); | 56 memset(mailbox.name, value, sizeof(mailbox.name)); |
57 return mailbox; | 57 return mailbox; |
58 } | 58 } |
59 | 59 |
| 60 gpu::SyncToken SyncTokenFromUInt(uint32_t value) { |
| 61 return gpu::SyncToken(gpu::CommandBufferNamespace::GPU_IO, 0, 0x123, value); |
| 62 } |
| 63 |
60 class MockLayerTreeHost : public LayerTreeHost { | 64 class MockLayerTreeHost : public LayerTreeHost { |
61 public: | 65 public: |
62 static scoped_ptr<MockLayerTreeHost> Create( | 66 static scoped_ptr<MockLayerTreeHost> Create( |
63 FakeLayerTreeHostClient* client, | 67 FakeLayerTreeHostClient* client, |
64 TaskGraphRunner* task_graph_runner) { | 68 TaskGraphRunner* task_graph_runner) { |
65 LayerTreeHost::InitParams params; | 69 LayerTreeHost::InitParams params; |
66 params.client = client; | 70 params.client = client; |
67 params.task_graph_runner = task_graph_runner; | 71 params.task_graph_runner = task_graph_runner; |
68 LayerTreeSettings settings; | 72 LayerTreeSettings settings; |
69 params.settings = &settings; | 73 params.settings = &settings; |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 void(SharedBitmap* shared_bitmap, | 138 void(SharedBitmap* shared_bitmap, |
135 const gpu::SyncToken& sync_token, | 139 const gpu::SyncToken& sync_token, |
136 bool lost_resource, | 140 bool lost_resource, |
137 BlockingTaskRunner* main_thread_task_runner)); | 141 BlockingTaskRunner* main_thread_task_runner)); |
138 }; | 142 }; |
139 | 143 |
140 struct CommonMailboxObjects { | 144 struct CommonMailboxObjects { |
141 explicit CommonMailboxObjects(SharedBitmapManager* manager) | 145 explicit CommonMailboxObjects(SharedBitmapManager* manager) |
142 : mailbox_name1_(MailboxFromChar('1')), | 146 : mailbox_name1_(MailboxFromChar('1')), |
143 mailbox_name2_(MailboxFromChar('2')), | 147 mailbox_name2_(MailboxFromChar('2')), |
144 sync_token1_(1), | 148 sync_token1_(gpu::CommandBufferNamespace::GPU_IO, 123, 0x234, 1), |
145 sync_token2_(2) { | 149 sync_token2_(gpu::CommandBufferNamespace::GPU_IO, 123, 0x234, 2) { |
146 release_mailbox1_ = base::Bind(&MockMailboxCallback::Release, | 150 release_mailbox1_ = base::Bind(&MockMailboxCallback::Release, |
147 base::Unretained(&mock_callback_), | 151 base::Unretained(&mock_callback_), |
148 mailbox_name1_); | 152 mailbox_name1_); |
149 release_mailbox2_ = base::Bind(&MockMailboxCallback::Release, | 153 release_mailbox2_ = base::Bind(&MockMailboxCallback::Release, |
150 base::Unretained(&mock_callback_), | 154 base::Unretained(&mock_callback_), |
151 mailbox_name2_); | 155 mailbox_name2_); |
152 release_mailbox1_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl, | 156 release_mailbox1_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl, |
153 base::Unretained(&mock_callback_), | 157 base::Unretained(&mock_callback_), |
154 mailbox_name1_); | 158 mailbox_name1_); |
155 release_mailbox2_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl, | 159 release_mailbox2_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl, |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 test_data_.mailbox1_, | 324 test_data_.mailbox1_, |
321 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); | 325 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); |
322 } | 326 } |
323 | 327 |
324 TEST_F(TextureLayerTest, SetTextureMailboxWithoutReleaseCallback) { | 328 TEST_F(TextureLayerTest, SetTextureMailboxWithoutReleaseCallback) { |
325 scoped_refptr<TextureLayer> test_layer = | 329 scoped_refptr<TextureLayer> test_layer = |
326 TextureLayer::CreateForMailbox(layer_settings_, nullptr); | 330 TextureLayer::CreateForMailbox(layer_settings_, nullptr); |
327 ASSERT_TRUE(test_layer.get()); | 331 ASSERT_TRUE(test_layer.get()); |
328 | 332 |
329 // These use the same gpu::Mailbox, but different sync points. | 333 // These use the same gpu::Mailbox, but different sync points. |
330 TextureMailbox mailbox1(MailboxFromChar('a'), gpu::SyncToken(1), | 334 TextureMailbox mailbox1(MailboxFromChar('a'), SyncTokenFromUInt(1), |
331 GL_TEXTURE_2D); | 335 GL_TEXTURE_2D); |
332 TextureMailbox mailbox2(MailboxFromChar('a'), gpu::SyncToken(2), | 336 TextureMailbox mailbox2(MailboxFromChar('a'), SyncTokenFromUInt(2), |
333 GL_TEXTURE_2D); | 337 GL_TEXTURE_2D); |
334 | 338 |
335 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); | 339 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); |
336 layer_tree_host_->SetRootLayer(test_layer); | 340 layer_tree_host_->SetRootLayer(test_layer); |
337 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 341 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
338 | 342 |
339 // Set the mailbox the first time. It should cause a commit. | 343 // Set the mailbox the first time. It should cause a commit. |
340 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1)); | 344 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1)); |
341 test_layer->SetTextureMailboxWithoutReleaseCallback(mailbox1); | 345 test_layer->SetTextureMailboxWithoutReleaseCallback(mailbox1); |
342 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 346 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 scoped_ptr<SingleReleaseCallbackImpl> compositor2; | 430 scoped_ptr<SingleReleaseCallbackImpl> compositor2; |
427 main_thread_.message_loop()->task_runner()->PostTask( | 431 main_thread_.message_loop()->task_runner()->PostTask( |
428 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 432 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
429 base::Unretained(this), &compositor2)); | 433 base::Unretained(this), &compositor2)); |
430 | 434 |
431 Wait(main_thread_); | 435 Wait(main_thread_); |
432 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 436 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
433 | 437 |
434 // The compositors both destroy their impl trees before the main thread layer | 438 // The compositors both destroy their impl trees before the main thread layer |
435 // is destroyed. | 439 // is destroyed. |
436 compositor1->Run(gpu::SyncToken(100), false, main_thread_task_runner_.get()); | 440 compositor1->Run(SyncTokenFromUInt(100), false, |
437 compositor2->Run(gpu::SyncToken(200), false, main_thread_task_runner_.get()); | 441 main_thread_task_runner_.get()); |
| 442 compositor2->Run(SyncTokenFromUInt(200), false, |
| 443 main_thread_task_runner_.get()); |
438 | 444 |
439 Wait(main_thread_); | 445 Wait(main_thread_); |
440 | 446 |
441 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); | 447 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); |
442 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 448 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
443 | 449 |
444 // The main thread ref is the last one, so the mailbox is released back to the | 450 // The main thread ref is the last one, so the mailbox is released back to the |
445 // embedder, with the last sync point provided by the impl trees. | 451 // embedder, with the last sync point provided by the impl trees. |
446 EXPECT_CALL(test_data_.mock_callback_, | 452 EXPECT_CALL(test_data_.mock_callback_, |
447 Release(test_data_.mailbox_name1_, gpu::SyncToken(200), false)) | 453 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), false)) |
448 .Times(1); | 454 .Times(1); |
449 | 455 |
450 main_thread_.message_loop()->task_runner()->PostTask( | 456 main_thread_.message_loop()->task_runner()->PostTask( |
451 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 457 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
452 base::Unretained(this))); | 458 base::Unretained(this))); |
453 Wait(main_thread_); | 459 Wait(main_thread_); |
454 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 460 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
455 } | 461 } |
456 | 462 |
457 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleaseBetween) { | 463 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleaseBetween) { |
(...skipping 18 matching lines...) Expand all Loading... |
476 // reference to its impl tree. | 482 // reference to its impl tree. |
477 scoped_ptr<SingleReleaseCallbackImpl> compositor2; | 483 scoped_ptr<SingleReleaseCallbackImpl> compositor2; |
478 main_thread_.message_loop()->task_runner()->PostTask( | 484 main_thread_.message_loop()->task_runner()->PostTask( |
479 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 485 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
480 base::Unretained(this), &compositor2)); | 486 base::Unretained(this), &compositor2)); |
481 | 487 |
482 Wait(main_thread_); | 488 Wait(main_thread_); |
483 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 489 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
484 | 490 |
485 // One compositor destroys their impl tree. | 491 // One compositor destroys their impl tree. |
486 compositor1->Run(gpu::SyncToken(100), false, main_thread_task_runner_.get()); | 492 compositor1->Run(SyncTokenFromUInt(100), false, |
| 493 main_thread_task_runner_.get()); |
487 | 494 |
488 // Then the main thread reference is destroyed. | 495 // Then the main thread reference is destroyed. |
489 main_thread_.message_loop()->task_runner()->PostTask( | 496 main_thread_.message_loop()->task_runner()->PostTask( |
490 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 497 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
491 base::Unretained(this))); | 498 base::Unretained(this))); |
492 | 499 |
493 Wait(main_thread_); | 500 Wait(main_thread_); |
494 | 501 |
495 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); | 502 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); |
496 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 503 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
497 | 504 |
498 // The second impl reference is destroyed last, causing the mailbox to be | 505 // The second impl reference is destroyed last, causing the mailbox to be |
499 // released back to the embedder with the last sync point from the impl tree. | 506 // released back to the embedder with the last sync point from the impl tree. |
500 EXPECT_CALL(test_data_.mock_callback_, | 507 EXPECT_CALL(test_data_.mock_callback_, |
501 Release(test_data_.mailbox_name1_, gpu::SyncToken(200), true)) | 508 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), true)) |
502 .Times(1); | 509 .Times(1); |
503 | 510 |
504 compositor2->Run(gpu::SyncToken(200), true, main_thread_task_runner_.get()); | 511 compositor2->Run(SyncTokenFromUInt(200), true, |
| 512 main_thread_task_runner_.get()); |
505 Wait(main_thread_); | 513 Wait(main_thread_); |
506 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 514 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
507 } | 515 } |
508 | 516 |
509 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleasedFirst) { | 517 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleasedFirst) { |
510 scoped_refptr<TextureLayer> test_layer = | 518 scoped_refptr<TextureLayer> test_layer = |
511 TextureLayer::CreateForMailbox(layer_settings_, nullptr); | 519 TextureLayer::CreateForMailbox(layer_settings_, nullptr); |
512 ASSERT_TRUE(test_layer.get()); | 520 ASSERT_TRUE(test_layer.get()); |
513 | 521 |
514 main_thread_.message_loop()->task_runner()->PostTask( | 522 main_thread_.message_loop()->task_runner()->PostTask( |
(...skipping 18 matching lines...) Expand all Loading... |
533 | 541 |
534 Wait(main_thread_); | 542 Wait(main_thread_); |
535 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 543 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
536 | 544 |
537 // The main thread reference is destroyed first. | 545 // The main thread reference is destroyed first. |
538 main_thread_.message_loop()->task_runner()->PostTask( | 546 main_thread_.message_loop()->task_runner()->PostTask( |
539 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 547 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
540 base::Unretained(this))); | 548 base::Unretained(this))); |
541 | 549 |
542 // One compositor destroys their impl tree. | 550 // One compositor destroys their impl tree. |
543 compositor2->Run(gpu::SyncToken(200), false, main_thread_task_runner_.get()); | 551 compositor2->Run(SyncTokenFromUInt(200), false, |
| 552 main_thread_task_runner_.get()); |
544 | 553 |
545 Wait(main_thread_); | 554 Wait(main_thread_); |
546 | 555 |
547 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); | 556 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); |
548 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 557 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
549 | 558 |
550 // The second impl reference is destroyed last, causing the mailbox to be | 559 // The second impl reference is destroyed last, causing the mailbox to be |
551 // released back to the embedder with the last sync point from the impl tree. | 560 // released back to the embedder with the last sync point from the impl tree. |
552 EXPECT_CALL(test_data_.mock_callback_, | 561 EXPECT_CALL(test_data_.mock_callback_, |
553 Release(test_data_.mailbox_name1_, gpu::SyncToken(100), true)) | 562 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(100), true)) |
554 .Times(1); | 563 .Times(1); |
555 | 564 |
556 compositor1->Run(gpu::SyncToken(100), true, main_thread_task_runner_.get()); | 565 compositor1->Run(SyncTokenFromUInt(100), true, |
| 566 main_thread_task_runner_.get()); |
557 Wait(main_thread_); | 567 Wait(main_thread_); |
558 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 568 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
559 } | 569 } |
560 | 570 |
561 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) { | 571 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) { |
562 scoped_refptr<TextureLayer> test_layer = | 572 scoped_refptr<TextureLayer> test_layer = |
563 TextureLayer::CreateForMailbox(layer_settings_, nullptr); | 573 TextureLayer::CreateForMailbox(layer_settings_, nullptr); |
564 ASSERT_TRUE(test_layer.get()); | 574 ASSERT_TRUE(test_layer.get()); |
565 | 575 |
566 main_thread_.message_loop()->task_runner()->PostTask( | 576 main_thread_.message_loop()->task_runner()->PostTask( |
(...skipping 18 matching lines...) Expand all Loading... |
585 | 595 |
586 Wait(main_thread_); | 596 Wait(main_thread_); |
587 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 597 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
588 | 598 |
589 // The main thread reference is destroyed first. | 599 // The main thread reference is destroyed first. |
590 main_thread_.message_loop()->task_runner()->PostTask( | 600 main_thread_.message_loop()->task_runner()->PostTask( |
591 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 601 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
592 base::Unretained(this))); | 602 base::Unretained(this))); |
593 | 603 |
594 EXPECT_CALL(test_data_.mock_callback_, | 604 EXPECT_CALL(test_data_.mock_callback_, |
595 Release(test_data_.mailbox_name1_, gpu::SyncToken(200), true)) | 605 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), true)) |
596 .Times(1); | 606 .Times(1); |
597 | 607 |
598 bool manual_reset = false; | 608 bool manual_reset = false; |
599 bool initially_signaled = false; | 609 bool initially_signaled = false; |
600 base::WaitableEvent begin_capture(manual_reset, initially_signaled); | 610 base::WaitableEvent begin_capture(manual_reset, initially_signaled); |
601 base::WaitableEvent wait_for_capture(manual_reset, initially_signaled); | 611 base::WaitableEvent wait_for_capture(manual_reset, initially_signaled); |
602 base::WaitableEvent stop_capture(manual_reset, initially_signaled); | 612 base::WaitableEvent stop_capture(manual_reset, initially_signaled); |
603 | 613 |
604 // Post a task to start capturing tasks on the main thread. This will block | 614 // Post a task to start capturing tasks on the main thread. This will block |
605 // the main thread until we signal the |stop_capture| event. | 615 // the main thread until we signal the |stop_capture| event. |
606 main_thread_.message_loop()->task_runner()->PostTask( | 616 main_thread_.message_loop()->task_runner()->PostTask( |
607 FROM_HERE, | 617 FROM_HERE, |
608 base::Bind(&TextureLayerMailboxHolderTest::CapturePostTasksAndWait, | 618 base::Bind(&TextureLayerMailboxHolderTest::CapturePostTasksAndWait, |
609 base::Unretained(this), &begin_capture, &wait_for_capture, | 619 base::Unretained(this), &begin_capture, &wait_for_capture, |
610 &stop_capture)); | 620 &stop_capture)); |
611 | 621 |
612 // Before the main thread capturing starts, one compositor destroys their | 622 // Before the main thread capturing starts, one compositor destroys their |
613 // impl reference. Since capturing did not start, this gets post-tasked to | 623 // impl reference. Since capturing did not start, this gets post-tasked to |
614 // the main thread. | 624 // the main thread. |
615 compositor1->Run(gpu::SyncToken(100), false, main_thread_task_runner_.get()); | 625 compositor1->Run(SyncTokenFromUInt(100), false, |
| 626 main_thread_task_runner_.get()); |
616 | 627 |
617 // Start capturing on the main thread. | 628 // Start capturing on the main thread. |
618 begin_capture.Signal(); | 629 begin_capture.Signal(); |
619 wait_for_capture.Wait(); | 630 wait_for_capture.Wait(); |
620 | 631 |
621 // Meanwhile, the second compositor released its impl reference, but this task | 632 // Meanwhile, the second compositor released its impl reference, but this task |
622 // gets shortcutted directly to the main thread. This means the reference is | 633 // gets shortcutted directly to the main thread. This means the reference is |
623 // released before compositor1, whose reference will be released later when | 634 // released before compositor1, whose reference will be released later when |
624 // the post-task is serviced. But since it was destroyed _on the impl thread_ | 635 // the post-task is serviced. But since it was destroyed _on the impl thread_ |
625 // last, its sync point values should be used. | 636 // last, its sync point values should be used. |
626 compositor2->Run(gpu::SyncToken(200), true, main_thread_task_runner_.get()); | 637 compositor2->Run(SyncTokenFromUInt(200), true, |
| 638 main_thread_task_runner_.get()); |
627 | 639 |
628 stop_capture.Signal(); | 640 stop_capture.Signal(); |
629 Wait(main_thread_); | 641 Wait(main_thread_); |
630 | 642 |
631 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 643 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
632 } | 644 } |
633 | 645 |
634 class TextureLayerImplWithMailboxThreadedCallback : public LayerTreeTest { | 646 class TextureLayerImplWithMailboxThreadedCallback : public LayerTreeTest { |
635 public: | 647 public: |
636 TextureLayerImplWithMailboxThreadedCallback() | 648 TextureLayerImplWithMailboxThreadedCallback() |
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1475 int callback_count_; | 1487 int callback_count_; |
1476 scoped_refptr<Layer> root_; | 1488 scoped_refptr<Layer> root_; |
1477 scoped_refptr<TextureLayer> layer_; | 1489 scoped_refptr<TextureLayer> layer_; |
1478 }; | 1490 }; |
1479 | 1491 |
1480 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( | 1492 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( |
1481 TextureLayerWithMailboxImplThreadDeleted); | 1493 TextureLayerWithMailboxImplThreadDeleted); |
1482 | 1494 |
1483 } // namespace | 1495 } // namespace |
1484 } // namespace cc | 1496 } // namespace cc |
OLD | NEW |