#include "media/renderers/resource_sync_token_client.h"
#include "gpu/command_buffer/client/interface_base.h"
namespace media {
ResourceSyncTokenClient::ResourceSyncTokenClient(
gpu::InterfaceBase* ib,
gpu::SyncToken old_frame_release_token,
gpu::SyncToken new_plane_release_token)
: ib_(ib),
old_frame_release_token_(std::move(old_frame_release_token)),
new_plane_release_token_(std::move(new_plane_release_token)) {
DCHECK(new_plane_release_token_.HasData());
DCHECK(ib_);
}
ResourceSyncTokenClient::~ResourceSyncTokenClient() = default;
void ResourceSyncTokenClient::GenerateSyncToken(gpu::SyncToken* sync_token) {
if (new_plane_release_token_.HasData()) {
*sync_token = new_plane_release_token_;
return;
}
ib_->GenSyncTokenCHROMIUM(sync_token->GetData());
}
void ResourceSyncTokenClient::WaitSyncToken(const gpu::SyncToken& sync_token) {
DCHECK(sync_token.HasData());
if (new_plane_release_token_ == sync_token) {
return;
}
if (old_frame_release_token_ == sync_token) {
return;
}
ib_->WaitSyncTokenCHROMIUM(sync_token.GetConstData());
ib_->WaitSyncTokenCHROMIUM(new_plane_release_token_.GetConstData());
new_plane_release_token_.Clear();
}
}