| 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 |