OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "content/common/gpu/client/command_buffer_proxy_impl.h" | 5 #include "content/common/gpu/client/command_buffer_proxy_impl.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
442 params.size = gfx::Size(width, height); | 442 params.size = gfx::Size(width, height); |
443 params.format = gpu_memory_buffer->GetFormat(); | 443 params.format = gpu_memory_buffer->GetFormat(); |
444 params.internal_format = internal_format; | 444 params.internal_format = internal_format; |
445 params.image_release_count = image_fence_sync; | 445 params.image_release_count = image_fence_sync; |
446 | 446 |
447 if (!Send(new GpuCommandBufferMsg_CreateImage(route_id_, params))) | 447 if (!Send(new GpuCommandBufferMsg_CreateImage(route_id_, params))) |
448 return -1; | 448 return -1; |
449 | 449 |
450 if (image_fence_sync) { | 450 if (image_fence_sync) { |
451 gpu::SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(), | 451 gpu::SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(), |
452 GetExtraCommandBufferData(), | |
452 image_fence_sync); | 453 image_fence_sync); |
453 | 454 |
454 // Force a synchronous IPC to validate sync token. | 455 // Force a synchronous IPC to validate sync token. |
455 channel_->ValidateFlushIDReachedServer(stream_id_, true); | 456 channel_->ValidateFlushIDReachedServer(stream_id_, true); |
456 sync_token.SetVerifyFlush(); | 457 sync_token.SetVerifyFlush(); |
457 | 458 |
458 gpu_memory_buffer_manager->SetDestructionSyncToken(gpu_memory_buffer, | 459 gpu_memory_buffer_manager->SetDestructionSyncToken(gpu_memory_buffer, |
459 sync_token); | 460 sync_token); |
460 } | 461 } |
461 | 462 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
512 } | 513 } |
513 | 514 |
514 gpu::CommandBufferNamespace CommandBufferProxyImpl::GetNamespaceID() const { | 515 gpu::CommandBufferNamespace CommandBufferProxyImpl::GetNamespaceID() const { |
515 return gpu::CommandBufferNamespace::GPU_IO; | 516 return gpu::CommandBufferNamespace::GPU_IO; |
516 } | 517 } |
517 | 518 |
518 uint64_t CommandBufferProxyImpl::GetCommandBufferID() const { | 519 uint64_t CommandBufferProxyImpl::GetCommandBufferID() const { |
519 return command_buffer_id_; | 520 return command_buffer_id_; |
520 } | 521 } |
521 | 522 |
523 uint32_t CommandBufferProxyImpl::GetExtraCommandBufferData() const { | |
524 return static_cast<uint32_t>(stream_id_); | |
525 } | |
526 | |
522 uint64_t CommandBufferProxyImpl::GenerateFenceSyncRelease() { | 527 uint64_t CommandBufferProxyImpl::GenerateFenceSyncRelease() { |
523 return next_fence_sync_release_++; | 528 return next_fence_sync_release_++; |
524 } | 529 } |
525 | 530 |
526 bool CommandBufferProxyImpl::IsFenceSyncRelease(uint64_t release) { | 531 bool CommandBufferProxyImpl::IsFenceSyncRelease(uint64_t release) { |
527 return release != 0 && release < next_fence_sync_release_; | 532 return release != 0 && release < next_fence_sync_release_; |
528 } | 533 } |
529 | 534 |
530 bool CommandBufferProxyImpl::IsFenceSyncFlushed(uint64_t release) { | 535 bool CommandBufferProxyImpl::IsFenceSyncFlushed(uint64_t release) { |
531 return release != 0 && release <= flushed_fence_sync_release_; | 536 return release != 0 && release <= flushed_fence_sync_release_; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
570 } | 575 } |
571 | 576 |
572 signal_tasks_.insert(std::make_pair(signal_id, callback)); | 577 signal_tasks_.insert(std::make_pair(signal_id, callback)); |
573 } | 578 } |
574 | 579 |
575 bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken( | 580 bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken( |
576 const gpu::SyncToken* sync_token) { | 581 const gpu::SyncToken* sync_token) { |
577 // Can only wait on an unverified sync token if it is from the same channel. | 582 // Can only wait on an unverified sync token if it is from the same channel. |
578 const uint64_t token_channel = sync_token->command_buffer_id() >> 32; | 583 const uint64_t token_channel = sync_token->command_buffer_id() >> 32; |
579 const uint64_t channel = command_buffer_id_ >> 32; | 584 const uint64_t channel = command_buffer_id_ >> 32; |
580 return (sync_token->namespace_id() == gpu::CommandBufferNamespace::GPU_IO && | 585 if (sync_token->namespace_id() != gpu::CommandBufferNamespace::GPU_IO && |
piman
2015/11/30 20:59:23
|| instead of &&
David Yen
2015/11/30 22:45:06
Done.
| |
581 token_channel == channel); | 586 token_channel != channel) { |
587 return false; | |
588 } | |
589 | |
590 // If waiting on a different stream, flush pending commands on that stream. | |
591 const int32_t release_stream_id = | |
592 static_cast<int32_t>(sync_token->extra_data_field()); | |
593 if (release_stream_id != stream_id_) | |
594 channel_->FlushPendingStream(release_stream_id); | |
595 | |
596 return true; | |
582 } | 597 } |
583 | 598 |
584 uint32 CommandBufferProxyImpl::InsertSyncPoint() { | 599 uint32 CommandBufferProxyImpl::InsertSyncPoint() { |
585 CheckLock(); | 600 CheckLock(); |
586 if (last_state_.error != gpu::error::kNoError) | 601 if (last_state_.error != gpu::error::kNoError) |
587 return 0; | 602 return 0; |
588 | 603 |
589 uint32 sync_point = 0; | 604 uint32 sync_point = 0; |
590 Send(new GpuCommandBufferMsg_InsertSyncPoint(route_id_, true, &sync_point)); | 605 Send(new GpuCommandBufferMsg_InsertSyncPoint(route_id_, true, &sync_point)); |
591 return sync_point; | 606 return sync_point; |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
757 } | 772 } |
758 } | 773 } |
759 | 774 |
760 void CommandBufferProxyImpl::OnUpdateVSyncParameters(base::TimeTicks timebase, | 775 void CommandBufferProxyImpl::OnUpdateVSyncParameters(base::TimeTicks timebase, |
761 base::TimeDelta interval) { | 776 base::TimeDelta interval) { |
762 if (!update_vsync_parameters_completion_callback_.is_null()) | 777 if (!update_vsync_parameters_completion_callback_.is_null()) |
763 update_vsync_parameters_completion_callback_.Run(timebase, interval); | 778 update_vsync_parameters_completion_callback_.Run(timebase, interval); |
764 } | 779 } |
765 | 780 |
766 } // namespace content | 781 } // namespace content |
OLD | NEW |