OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "gpu/command_buffer/service/in_process_command_buffer.h" | 5 #include "gpu/command_buffer/service/in_process_command_buffer.h" |
6 | 6 |
| 7 #include <stddef.h> |
| 8 #include <stdint.h> |
| 9 |
7 #include <queue> | 10 #include <queue> |
8 #include <set> | 11 #include <set> |
9 #include <utility> | 12 #include <utility> |
10 | 13 |
11 #include "base/bind.h" | 14 #include "base/bind.h" |
12 #include "base/bind_helpers.h" | 15 #include "base/bind_helpers.h" |
13 #include "base/command_line.h" | 16 #include "base/command_line.h" |
14 #include "base/lazy_instance.h" | 17 #include "base/lazy_instance.h" |
15 #include "base/location.h" | 18 #include "base/location.h" |
16 #include "base/logging.h" | 19 #include "base/logging.h" |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 void InProcessCommandBuffer::PumpCommands() { | 233 void InProcessCommandBuffer::PumpCommands() { |
231 CheckSequencedThread(); | 234 CheckSequencedThread(); |
232 command_buffer_lock_.AssertAcquired(); | 235 command_buffer_lock_.AssertAcquired(); |
233 | 236 |
234 if (!MakeCurrent()) | 237 if (!MakeCurrent()) |
235 return; | 238 return; |
236 | 239 |
237 gpu_scheduler_->PutChanged(); | 240 gpu_scheduler_->PutChanged(); |
238 } | 241 } |
239 | 242 |
240 bool InProcessCommandBuffer::GetBufferChanged(int32 transfer_buffer_id) { | 243 bool InProcessCommandBuffer::GetBufferChanged(int32_t transfer_buffer_id) { |
241 CheckSequencedThread(); | 244 CheckSequencedThread(); |
242 command_buffer_lock_.AssertAcquired(); | 245 command_buffer_lock_.AssertAcquired(); |
243 command_buffer_->SetGetBuffer(transfer_buffer_id); | 246 command_buffer_->SetGetBuffer(transfer_buffer_id); |
244 return true; | 247 return true; |
245 } | 248 } |
246 | 249 |
247 bool InProcessCommandBuffer::Initialize( | 250 bool InProcessCommandBuffer::Initialize( |
248 scoped_refptr<gfx::GLSurface> surface, | 251 scoped_refptr<gfx::GLSurface> surface, |
249 bool is_offscreen, | 252 bool is_offscreen, |
250 gfx::AcceleratedWidget window, | 253 gfx::AcceleratedWidget window, |
251 const gfx::Size& size, | 254 const gfx::Size& size, |
252 const std::vector<int32>& attribs, | 255 const std::vector<int32_t>& attribs, |
253 gfx::GpuPreference gpu_preference, | 256 gfx::GpuPreference gpu_preference, |
254 const base::Closure& context_lost_callback, | 257 const base::Closure& context_lost_callback, |
255 InProcessCommandBuffer* share_group, | 258 InProcessCommandBuffer* share_group, |
256 GpuMemoryBufferManager* gpu_memory_buffer_manager, | 259 GpuMemoryBufferManager* gpu_memory_buffer_manager, |
257 ImageFactory* image_factory) { | 260 ImageFactory* image_factory) { |
258 DCHECK(!share_group || service_.get() == share_group->service_.get()); | 261 DCHECK(!share_group || service_.get() == share_group->service_.get()); |
259 context_lost_callback_ = WrapCallback(context_lost_callback); | 262 context_lost_callback_ = WrapCallback(context_lost_callback); |
260 | 263 |
261 if (surface.get()) { | 264 if (surface.get()) { |
262 // GPU thread must be the same as client thread due to GLSurface not being | 265 // GPU thread must be the same as client thread due to GLSurface not being |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 if (state_after_last_flush_.generation - last_state_.generation < 0x80000000U) | 498 if (state_after_last_flush_.generation - last_state_.generation < 0x80000000U) |
496 last_state_ = state_after_last_flush_; | 499 last_state_ = state_after_last_flush_; |
497 return last_state_; | 500 return last_state_; |
498 } | 501 } |
499 | 502 |
500 CommandBuffer::State InProcessCommandBuffer::GetLastState() { | 503 CommandBuffer::State InProcessCommandBuffer::GetLastState() { |
501 CheckSequencedThread(); | 504 CheckSequencedThread(); |
502 return last_state_; | 505 return last_state_; |
503 } | 506 } |
504 | 507 |
505 int32 InProcessCommandBuffer::GetLastToken() { | 508 int32_t InProcessCommandBuffer::GetLastToken() { |
506 CheckSequencedThread(); | 509 CheckSequencedThread(); |
507 GetStateFast(); | 510 GetStateFast(); |
508 return last_state_.token; | 511 return last_state_.token; |
509 } | 512 } |
510 | 513 |
511 void InProcessCommandBuffer::FlushOnGpuThread(int32 put_offset, | 514 void InProcessCommandBuffer::FlushOnGpuThread(int32_t put_offset, |
512 uint32_t order_num) { | 515 uint32_t order_num) { |
513 CheckSequencedThread(); | 516 CheckSequencedThread(); |
514 ScopedEvent handle_flush(&flush_event_); | 517 ScopedEvent handle_flush(&flush_event_); |
515 base::AutoLock lock(command_buffer_lock_); | 518 base::AutoLock lock(command_buffer_lock_); |
516 | 519 |
517 { | 520 { |
518 ScopedOrderNumberProcessor scoped_order_num(sync_point_order_data_.get(), | 521 ScopedOrderNumberProcessor scoped_order_num(sync_point_order_data_.get(), |
519 order_num); | 522 order_num); |
520 command_buffer_->Flush(put_offset); | 523 command_buffer_->Flush(put_offset); |
521 { | 524 { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 | 561 |
559 void InProcessCommandBuffer::ScheduleDelayedWorkOnGpuThread() { | 562 void InProcessCommandBuffer::ScheduleDelayedWorkOnGpuThread() { |
560 CheckSequencedThread(); | 563 CheckSequencedThread(); |
561 if (delayed_work_pending_) | 564 if (delayed_work_pending_) |
562 return; | 565 return; |
563 delayed_work_pending_ = true; | 566 delayed_work_pending_ = true; |
564 service_->ScheduleDelayedWork(base::Bind( | 567 service_->ScheduleDelayedWork(base::Bind( |
565 &InProcessCommandBuffer::PerformDelayedWork, gpu_thread_weak_ptr_)); | 568 &InProcessCommandBuffer::PerformDelayedWork, gpu_thread_weak_ptr_)); |
566 } | 569 } |
567 | 570 |
568 void InProcessCommandBuffer::Flush(int32 put_offset) { | 571 void InProcessCommandBuffer::Flush(int32_t put_offset) { |
569 CheckSequencedThread(); | 572 CheckSequencedThread(); |
570 if (last_state_.error != gpu::error::kNoError) | 573 if (last_state_.error != gpu::error::kNoError) |
571 return; | 574 return; |
572 | 575 |
573 if (last_put_offset_ == put_offset) | 576 if (last_put_offset_ == put_offset) |
574 return; | 577 return; |
575 | 578 |
576 SyncPointManager* sync_manager = service_->sync_point_manager(); | 579 SyncPointManager* sync_manager = service_->sync_point_manager(); |
577 const uint32_t order_num = | 580 const uint32_t order_num = |
578 sync_point_order_data_->GenerateUnprocessedOrderNumber(sync_manager); | 581 sync_point_order_data_->GenerateUnprocessedOrderNumber(sync_manager); |
579 last_put_offset_ = put_offset; | 582 last_put_offset_ = put_offset; |
580 base::Closure task = base::Bind(&InProcessCommandBuffer::FlushOnGpuThread, | 583 base::Closure task = base::Bind(&InProcessCommandBuffer::FlushOnGpuThread, |
581 gpu_thread_weak_ptr_, | 584 gpu_thread_weak_ptr_, |
582 put_offset, | 585 put_offset, |
583 order_num); | 586 order_num); |
584 QueueTask(task); | 587 QueueTask(task); |
585 | 588 |
586 flushed_fence_sync_release_ = next_fence_sync_release_ - 1; | 589 flushed_fence_sync_release_ = next_fence_sync_release_ - 1; |
587 } | 590 } |
588 | 591 |
589 void InProcessCommandBuffer::OrderingBarrier(int32 put_offset) { | 592 void InProcessCommandBuffer::OrderingBarrier(int32_t put_offset) { |
590 Flush(put_offset); | 593 Flush(put_offset); |
591 } | 594 } |
592 | 595 |
593 void InProcessCommandBuffer::WaitForTokenInRange(int32 start, int32 end) { | 596 void InProcessCommandBuffer::WaitForTokenInRange(int32_t start, int32_t end) { |
594 CheckSequencedThread(); | 597 CheckSequencedThread(); |
595 while (!InRange(start, end, GetLastToken()) && | 598 while (!InRange(start, end, GetLastToken()) && |
596 last_state_.error == gpu::error::kNoError) | 599 last_state_.error == gpu::error::kNoError) |
597 flush_event_.Wait(); | 600 flush_event_.Wait(); |
598 } | 601 } |
599 | 602 |
600 void InProcessCommandBuffer::WaitForGetOffsetInRange(int32 start, int32 end) { | 603 void InProcessCommandBuffer::WaitForGetOffsetInRange(int32_t start, |
| 604 int32_t end) { |
601 CheckSequencedThread(); | 605 CheckSequencedThread(); |
602 | 606 |
603 GetStateFast(); | 607 GetStateFast(); |
604 while (!InRange(start, end, last_state_.get_offset) && | 608 while (!InRange(start, end, last_state_.get_offset) && |
605 last_state_.error == gpu::error::kNoError) { | 609 last_state_.error == gpu::error::kNoError) { |
606 flush_event_.Wait(); | 610 flush_event_.Wait(); |
607 GetStateFast(); | 611 GetStateFast(); |
608 } | 612 } |
609 } | 613 } |
610 | 614 |
611 void InProcessCommandBuffer::SetGetBuffer(int32 shm_id) { | 615 void InProcessCommandBuffer::SetGetBuffer(int32_t shm_id) { |
612 CheckSequencedThread(); | 616 CheckSequencedThread(); |
613 if (last_state_.error != gpu::error::kNoError) | 617 if (last_state_.error != gpu::error::kNoError) |
614 return; | 618 return; |
615 | 619 |
616 base::WaitableEvent completion(true, false); | 620 base::WaitableEvent completion(true, false); |
617 base::Closure task = | 621 base::Closure task = |
618 base::Bind(&InProcessCommandBuffer::SetGetBufferOnGpuThread, | 622 base::Bind(&InProcessCommandBuffer::SetGetBufferOnGpuThread, |
619 base::Unretained(this), shm_id, &completion); | 623 base::Unretained(this), shm_id, &completion); |
620 QueueTask(task); | 624 QueueTask(task); |
621 completion.Wait(); | 625 completion.Wait(); |
622 | 626 |
623 { | 627 { |
624 base::AutoLock lock(state_after_last_flush_lock_); | 628 base::AutoLock lock(state_after_last_flush_lock_); |
625 state_after_last_flush_ = command_buffer_->GetLastState(); | 629 state_after_last_flush_ = command_buffer_->GetLastState(); |
626 } | 630 } |
627 } | 631 } |
628 | 632 |
629 void InProcessCommandBuffer::SetGetBufferOnGpuThread( | 633 void InProcessCommandBuffer::SetGetBufferOnGpuThread( |
630 int32 shm_id, | 634 int32_t shm_id, |
631 base::WaitableEvent* completion) { | 635 base::WaitableEvent* completion) { |
632 base::AutoLock lock(command_buffer_lock_); | 636 base::AutoLock lock(command_buffer_lock_); |
633 command_buffer_->SetGetBuffer(shm_id); | 637 command_buffer_->SetGetBuffer(shm_id); |
634 last_put_offset_ = 0; | 638 last_put_offset_ = 0; |
635 completion->Signal(); | 639 completion->Signal(); |
636 } | 640 } |
637 | 641 |
638 scoped_refptr<Buffer> InProcessCommandBuffer::CreateTransferBuffer(size_t size, | 642 scoped_refptr<Buffer> InProcessCommandBuffer::CreateTransferBuffer( |
639 int32* id) { | 643 size_t size, |
| 644 int32_t* id) { |
640 CheckSequencedThread(); | 645 CheckSequencedThread(); |
641 base::AutoLock lock(command_buffer_lock_); | 646 base::AutoLock lock(command_buffer_lock_); |
642 return command_buffer_->CreateTransferBuffer(size, id); | 647 return command_buffer_->CreateTransferBuffer(size, id); |
643 } | 648 } |
644 | 649 |
645 void InProcessCommandBuffer::DestroyTransferBuffer(int32 id) { | 650 void InProcessCommandBuffer::DestroyTransferBuffer(int32_t id) { |
646 CheckSequencedThread(); | 651 CheckSequencedThread(); |
647 base::Closure task = | 652 base::Closure task = |
648 base::Bind(&InProcessCommandBuffer::DestroyTransferBufferOnGpuThread, | 653 base::Bind(&InProcessCommandBuffer::DestroyTransferBufferOnGpuThread, |
649 base::Unretained(this), | 654 base::Unretained(this), |
650 id); | 655 id); |
651 | 656 |
652 QueueTask(task); | 657 QueueTask(task); |
653 } | 658 } |
654 | 659 |
655 void InProcessCommandBuffer::DestroyTransferBufferOnGpuThread(int32 id) { | 660 void InProcessCommandBuffer::DestroyTransferBufferOnGpuThread(int32_t id) { |
656 base::AutoLock lock(command_buffer_lock_); | 661 base::AutoLock lock(command_buffer_lock_); |
657 command_buffer_->DestroyTransferBuffer(id); | 662 command_buffer_->DestroyTransferBuffer(id); |
658 } | 663 } |
659 | 664 |
660 gpu::Capabilities InProcessCommandBuffer::GetCapabilities() { | 665 gpu::Capabilities InProcessCommandBuffer::GetCapabilities() { |
661 return capabilities_; | 666 return capabilities_; |
662 } | 667 } |
663 | 668 |
664 int32 InProcessCommandBuffer::CreateImage(ClientBuffer buffer, | 669 int32_t InProcessCommandBuffer::CreateImage(ClientBuffer buffer, |
665 size_t width, | 670 size_t width, |
666 size_t height, | 671 size_t height, |
667 unsigned internalformat) { | 672 unsigned internalformat) { |
668 CheckSequencedThread(); | 673 CheckSequencedThread(); |
669 | 674 |
670 DCHECK(gpu_memory_buffer_manager_); | 675 DCHECK(gpu_memory_buffer_manager_); |
671 gfx::GpuMemoryBuffer* gpu_memory_buffer = | 676 gfx::GpuMemoryBuffer* gpu_memory_buffer = |
672 gpu_memory_buffer_manager_->GpuMemoryBufferFromClientBuffer(buffer); | 677 gpu_memory_buffer_manager_->GpuMemoryBufferFromClientBuffer(buffer); |
673 DCHECK(gpu_memory_buffer); | 678 DCHECK(gpu_memory_buffer); |
674 | 679 |
675 int32 new_id = next_image_id_.GetNext(); | 680 int32_t new_id = next_image_id_.GetNext(); |
676 | 681 |
677 DCHECK(gpu::ImageFactory::IsGpuMemoryBufferFormatSupported( | 682 DCHECK(gpu::ImageFactory::IsGpuMemoryBufferFormatSupported( |
678 gpu_memory_buffer->GetFormat(), capabilities_)); | 683 gpu_memory_buffer->GetFormat(), capabilities_)); |
679 DCHECK(gpu::ImageFactory::IsImageFormatCompatibleWithGpuMemoryBufferFormat( | 684 DCHECK(gpu::ImageFactory::IsImageFormatCompatibleWithGpuMemoryBufferFormat( |
680 internalformat, gpu_memory_buffer->GetFormat())); | 685 internalformat, gpu_memory_buffer->GetFormat())); |
681 | 686 |
682 // This handle is owned by the GPU thread and must be passed to it or it | 687 // This handle is owned by the GPU thread and must be passed to it or it |
683 // will leak. In otherwords, do not early out on error between here and the | 688 // will leak. In otherwords, do not early out on error between here and the |
684 // queuing of the CreateImage task below. | 689 // queuing of the CreateImage task below. |
685 bool requires_sync_point = false; | 690 bool requires_sync_point = false; |
(...skipping 24 matching lines...) Expand all Loading... |
710 GetCommandBufferID(), fence_sync); | 715 GetCommandBufferID(), fence_sync); |
711 sync_token.SetVerifyFlush(); | 716 sync_token.SetVerifyFlush(); |
712 gpu_memory_buffer_manager_->SetDestructionSyncToken(gpu_memory_buffer, | 717 gpu_memory_buffer_manager_->SetDestructionSyncToken(gpu_memory_buffer, |
713 sync_token); | 718 sync_token); |
714 } | 719 } |
715 | 720 |
716 return new_id; | 721 return new_id; |
717 } | 722 } |
718 | 723 |
719 void InProcessCommandBuffer::CreateImageOnGpuThread( | 724 void InProcessCommandBuffer::CreateImageOnGpuThread( |
720 int32 id, | 725 int32_t id, |
721 const gfx::GpuMemoryBufferHandle& handle, | 726 const gfx::GpuMemoryBufferHandle& handle, |
722 const gfx::Size& size, | 727 const gfx::Size& size, |
723 gfx::BufferFormat format, | 728 gfx::BufferFormat format, |
724 uint32 internalformat, | 729 uint32_t internalformat, |
725 uint32_t order_num, | 730 uint32_t order_num, |
726 uint64_t fence_sync) { | 731 uint64_t fence_sync) { |
727 ScopedOrderNumberProcessor scoped_order_num(sync_point_order_data_.get(), | 732 ScopedOrderNumberProcessor scoped_order_num(sync_point_order_data_.get(), |
728 order_num); | 733 order_num); |
729 if (!decoder_) | 734 if (!decoder_) |
730 return; | 735 return; |
731 | 736 |
732 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); | 737 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); |
733 DCHECK(image_manager); | 738 DCHECK(image_manager); |
734 if (image_manager->LookupImage(id)) { | 739 if (image_manager->LookupImage(id)) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
773 image_manager->AddImage(image.get(), id); | 778 image_manager->AddImage(image.get(), id); |
774 break; | 779 break; |
775 } | 780 } |
776 } | 781 } |
777 | 782 |
778 if (fence_sync) { | 783 if (fence_sync) { |
779 sync_point_client_->ReleaseFenceSync(fence_sync); | 784 sync_point_client_->ReleaseFenceSync(fence_sync); |
780 } | 785 } |
781 } | 786 } |
782 | 787 |
783 void InProcessCommandBuffer::DestroyImage(int32 id) { | 788 void InProcessCommandBuffer::DestroyImage(int32_t id) { |
784 CheckSequencedThread(); | 789 CheckSequencedThread(); |
785 | 790 |
786 QueueTask(base::Bind(&InProcessCommandBuffer::DestroyImageOnGpuThread, | 791 QueueTask(base::Bind(&InProcessCommandBuffer::DestroyImageOnGpuThread, |
787 base::Unretained(this), | 792 base::Unretained(this), |
788 id)); | 793 id)); |
789 } | 794 } |
790 | 795 |
791 void InProcessCommandBuffer::DestroyImageOnGpuThread(int32 id) { | 796 void InProcessCommandBuffer::DestroyImageOnGpuThread(int32_t id) { |
792 if (!decoder_) | 797 if (!decoder_) |
793 return; | 798 return; |
794 | 799 |
795 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); | 800 gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); |
796 DCHECK(image_manager); | 801 DCHECK(image_manager); |
797 if (!image_manager->LookupImage(id)) { | 802 if (!image_manager->LookupImage(id)) { |
798 LOG(ERROR) << "Image with ID doesn't exist."; | 803 LOG(ERROR) << "Image with ID doesn't exist."; |
799 return; | 804 return; |
800 } | 805 } |
801 | 806 |
802 image_manager->RemoveImage(id); | 807 image_manager->RemoveImage(id); |
803 } | 808 } |
804 | 809 |
805 int32 InProcessCommandBuffer::CreateGpuMemoryBufferImage( | 810 int32_t InProcessCommandBuffer::CreateGpuMemoryBufferImage( |
806 size_t width, | 811 size_t width, |
807 size_t height, | 812 size_t height, |
808 unsigned internalformat, | 813 unsigned internalformat, |
809 unsigned usage) { | 814 unsigned usage) { |
810 CheckSequencedThread(); | 815 CheckSequencedThread(); |
811 | 816 |
812 DCHECK(gpu_memory_buffer_manager_); | 817 DCHECK(gpu_memory_buffer_manager_); |
813 scoped_ptr<gfx::GpuMemoryBuffer> buffer( | 818 scoped_ptr<gfx::GpuMemoryBuffer> buffer( |
814 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( | 819 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( |
815 gfx::Size(width, height), | 820 gfx::Size(width, height), |
816 gpu::ImageFactory::DefaultBufferFormatForImageFormat(internalformat), | 821 gpu::ImageFactory::DefaultBufferFormatForImageFormat(internalformat), |
817 gfx::BufferUsage::SCANOUT)); | 822 gfx::BufferUsage::SCANOUT)); |
818 if (!buffer) | 823 if (!buffer) |
819 return -1; | 824 return -1; |
820 | 825 |
821 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); | 826 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); |
822 } | 827 } |
823 | 828 |
824 uint32 InProcessCommandBuffer::InsertSyncPoint() { | 829 uint32_t InProcessCommandBuffer::InsertSyncPoint() { |
825 uint32 sync_point = service_->sync_point_manager()->GenerateSyncPoint(); | 830 uint32_t sync_point = service_->sync_point_manager()->GenerateSyncPoint(); |
826 QueueTask(base::Bind(&InProcessCommandBuffer::RetireSyncPointOnGpuThread, | 831 QueueTask(base::Bind(&InProcessCommandBuffer::RetireSyncPointOnGpuThread, |
827 base::Unretained(this), | 832 base::Unretained(this), |
828 sync_point)); | 833 sync_point)); |
829 return sync_point; | 834 return sync_point; |
830 } | 835 } |
831 | 836 |
832 uint32 InProcessCommandBuffer::InsertFutureSyncPoint() { | 837 uint32_t InProcessCommandBuffer::InsertFutureSyncPoint() { |
833 return service_->sync_point_manager()->GenerateSyncPoint(); | 838 return service_->sync_point_manager()->GenerateSyncPoint(); |
834 } | 839 } |
835 | 840 |
836 void InProcessCommandBuffer::RetireSyncPoint(uint32 sync_point) { | 841 void InProcessCommandBuffer::RetireSyncPoint(uint32_t sync_point) { |
837 QueueTask(base::Bind(&InProcessCommandBuffer::RetireSyncPointOnGpuThread, | 842 QueueTask(base::Bind(&InProcessCommandBuffer::RetireSyncPointOnGpuThread, |
838 base::Unretained(this), | 843 base::Unretained(this), |
839 sync_point)); | 844 sync_point)); |
840 } | 845 } |
841 | 846 |
842 void InProcessCommandBuffer::RetireSyncPointOnGpuThread(uint32 sync_point) { | 847 void InProcessCommandBuffer::RetireSyncPointOnGpuThread(uint32_t sync_point) { |
843 gles2::MailboxManager* mailbox_manager = | 848 gles2::MailboxManager* mailbox_manager = |
844 decoder_->GetContextGroup()->mailbox_manager(); | 849 decoder_->GetContextGroup()->mailbox_manager(); |
845 if (mailbox_manager->UsesSync()) { | 850 if (mailbox_manager->UsesSync()) { |
846 bool make_current_success = false; | 851 bool make_current_success = false; |
847 { | 852 { |
848 base::AutoLock lock(command_buffer_lock_); | 853 base::AutoLock lock(command_buffer_lock_); |
849 make_current_success = MakeCurrent(); | 854 make_current_success = MakeCurrent(); |
850 } | 855 } |
851 if (make_current_success) { | 856 if (make_current_success) { |
852 // Old sync points are global and do not have a command buffer ID, | 857 // Old sync points are global and do not have a command buffer ID, |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1014 base::Unretained(this), | 1019 base::Unretained(this), |
1015 sync_token, | 1020 sync_token, |
1016 WrapCallback(callback))); | 1021 WrapCallback(callback))); |
1017 } | 1022 } |
1018 | 1023 |
1019 bool InProcessCommandBuffer::CanWaitUnverifiedSyncToken( | 1024 bool InProcessCommandBuffer::CanWaitUnverifiedSyncToken( |
1020 const SyncToken* sync_token) { | 1025 const SyncToken* sync_token) { |
1021 return false; | 1026 return false; |
1022 } | 1027 } |
1023 | 1028 |
1024 uint32 InProcessCommandBuffer::CreateStreamTextureOnGpuThread( | 1029 uint32_t InProcessCommandBuffer::CreateStreamTextureOnGpuThread( |
1025 uint32 client_texture_id) { | 1030 uint32_t client_texture_id) { |
1026 #if defined(OS_ANDROID) | 1031 #if defined(OS_ANDROID) |
1027 return stream_texture_manager_->CreateStreamTexture( | 1032 return stream_texture_manager_->CreateStreamTexture( |
1028 client_texture_id, decoder_->GetContextGroup()->texture_manager()); | 1033 client_texture_id, decoder_->GetContextGroup()->texture_manager()); |
1029 #else | 1034 #else |
1030 return 0; | 1035 return 0; |
1031 #endif | 1036 #endif |
1032 } | 1037 } |
1033 | 1038 |
1034 gpu::error::Error InProcessCommandBuffer::GetLastError() { | 1039 gpu::error::Error InProcessCommandBuffer::GetLastError() { |
1035 CheckSequencedThread(); | 1040 CheckSequencedThread(); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1071 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); | 1076 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); |
1072 base::Closure wrapped_callback = | 1077 base::Closure wrapped_callback = |
1073 base::Bind(&PostCallback, base::ThreadTaskRunnerHandle::IsSet() | 1078 base::Bind(&PostCallback, base::ThreadTaskRunnerHandle::IsSet() |
1074 ? base::ThreadTaskRunnerHandle::Get() | 1079 ? base::ThreadTaskRunnerHandle::Get() |
1075 : nullptr, | 1080 : nullptr, |
1076 callback_on_client_thread); | 1081 callback_on_client_thread); |
1077 return wrapped_callback; | 1082 return wrapped_callback; |
1078 } | 1083 } |
1079 | 1084 |
1080 #if defined(OS_ANDROID) | 1085 #if defined(OS_ANDROID) |
1081 scoped_refptr<gfx::SurfaceTexture> | 1086 scoped_refptr<gfx::SurfaceTexture> InProcessCommandBuffer::GetSurfaceTexture( |
1082 InProcessCommandBuffer::GetSurfaceTexture(uint32 stream_id) { | 1087 uint32_t stream_id) { |
1083 DCHECK(stream_texture_manager_); | 1088 DCHECK(stream_texture_manager_); |
1084 return stream_texture_manager_->GetSurfaceTexture(stream_id); | 1089 return stream_texture_manager_->GetSurfaceTexture(stream_id); |
1085 } | 1090 } |
1086 | 1091 |
1087 uint32 InProcessCommandBuffer::CreateStreamTexture(uint32 texture_id) { | 1092 uint32_t InProcessCommandBuffer::CreateStreamTexture(uint32_t texture_id) { |
1088 base::WaitableEvent completion(true, false); | 1093 base::WaitableEvent completion(true, false); |
1089 uint32 stream_id = 0; | 1094 uint32_t stream_id = 0; |
1090 base::Callback<uint32(void)> task = | 1095 base::Callback<uint32_t(void)> task = |
1091 base::Bind(&InProcessCommandBuffer::CreateStreamTextureOnGpuThread, | 1096 base::Bind(&InProcessCommandBuffer::CreateStreamTextureOnGpuThread, |
1092 base::Unretained(this), texture_id); | 1097 base::Unretained(this), texture_id); |
1093 QueueTask( | 1098 QueueTask( |
1094 base::Bind(&RunTaskWithResult<uint32>, task, &stream_id, &completion)); | 1099 base::Bind(&RunTaskWithResult<uint32_t>, task, &stream_id, &completion)); |
1095 completion.Wait(); | 1100 completion.Wait(); |
1096 return stream_id; | 1101 return stream_id; |
1097 } | 1102 } |
1098 #endif | 1103 #endif |
1099 | 1104 |
1100 GpuInProcessThread::GpuInProcessThread(SyncPointManager* sync_point_manager) | 1105 GpuInProcessThread::GpuInProcessThread(SyncPointManager* sync_point_manager) |
1101 : base::Thread("GpuThread"), sync_point_manager_(sync_point_manager) { | 1106 : base::Thread("GpuThread"), sync_point_manager_(sync_point_manager) { |
1102 Start(); | 1107 Start(); |
1103 } | 1108 } |
1104 | 1109 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1140 framebuffer_completeness_cache_ = | 1145 framebuffer_completeness_cache_ = |
1141 new gpu::gles2::FramebufferCompletenessCache; | 1146 new gpu::gles2::FramebufferCompletenessCache; |
1142 return framebuffer_completeness_cache_; | 1147 return framebuffer_completeness_cache_; |
1143 } | 1148 } |
1144 | 1149 |
1145 SyncPointManager* GpuInProcessThread::sync_point_manager() { | 1150 SyncPointManager* GpuInProcessThread::sync_point_manager() { |
1146 return sync_point_manager_; | 1151 return sync_point_manager_; |
1147 } | 1152 } |
1148 | 1153 |
1149 } // namespace gpu | 1154 } // namespace gpu |
OLD | NEW |