[SIPool] Update SharedImagePool to use new PoolId.
Update SharedImagePool to use new PoolId which is unguessable. This is required since pool id will later be stored in a shared image backing generated from a pool. It will be used to identify the pool to which the backing belongs. Since the pool id will be sent across multiple process including renderers, browser and gpu process, it needs to be unguessable. Bug: 383466770 Change-Id: Iff0da80e5ecbb5461124ca16f7cee9eec46556d4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6088286 Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org> Auto-Submit: vikas soni <vikassoni@chromium.org> Commit-Queue: vikas soni <vikassoni@chromium.org> Cr-Commit-Position: refs/heads/main@{#1395620}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
e53581b711
commit
eb5e095127
gpu/command_buffer
@@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
#include "gpu/command_buffer/client/shared_image_pool.h"
|
#include "gpu/command_buffer/client/shared_image_pool.h"
|
||||||
|
|
||||||
#include "base/atomic_sequence_num.h"
|
|
||||||
#include "gpu/command_buffer/client/shared_image_interface.h"
|
#include "gpu/command_buffer/client/shared_image_interface.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@@ -17,8 +16,6 @@ gpu::ImageInfo GetImageInfo(scoped_refptr<gpu::ClientImage> image) {
|
|||||||
shared_image->alpha_type(), shared_image->buffer_usage());
|
shared_image->alpha_type(), shared_image->buffer_usage());
|
||||||
}
|
}
|
||||||
|
|
||||||
base::AtomicSequenceNumber g_pool_id;
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
namespace gpu {
|
namespace gpu {
|
||||||
@@ -47,16 +44,17 @@ void ClientImage::SetReleaseSyncToken(SyncToken release_sync_token) {
|
|||||||
sync_token_ = std::move(release_sync_token);
|
sync_token_ = std::move(release_sync_token);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ClientImage::GetPoolIdForTesting() const {
|
const PoolId& ClientImage::GetPoolIdForTesting() const {
|
||||||
return pool_id_;
|
return pool_id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedImagePoolBase::SharedImagePoolBase(
|
SharedImagePoolBase::SharedImagePoolBase(
|
||||||
|
const PoolId& pool_id,
|
||||||
const ImageInfo& image_info,
|
const ImageInfo& image_info,
|
||||||
const scoped_refptr<SharedImageInterface> sii,
|
const scoped_refptr<SharedImageInterface> sii,
|
||||||
std::optional<uint8_t> max_pool_size,
|
std::optional<uint8_t> max_pool_size,
|
||||||
std::optional<base::TimeDelta> unused_resource_expiration_time)
|
std::optional<base::TimeDelta> unused_resource_expiration_time)
|
||||||
: pool_id_(g_pool_id.GetNext()),
|
: pool_id_(pool_id),
|
||||||
image_info_(image_info),
|
image_info_(image_info),
|
||||||
sii_(std::move(sii)),
|
sii_(std::move(sii)),
|
||||||
max_pool_size_(std::move(max_pool_size)),
|
max_pool_size_(std::move(max_pool_size)),
|
||||||
@@ -113,7 +111,7 @@ void SharedImagePoolBase::ReleaseImageInternal(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ensure that the |image| belongs to |this| pool.
|
// Ensure that the |image| belongs to |this| pool.
|
||||||
CHECK_EQ(image->pool_id_, pool_id_);
|
CHECK_EQ(image->pool_id_.ToString(), pool_id_.ToString());
|
||||||
|
|
||||||
// Ensure that there is only one reference which the current |image| and
|
// Ensure that there is only one reference which the current |image| and
|
||||||
// clients are not accidentally keeping more references alive while releasing
|
// clients are not accidentally keeping more references alive while releasing
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include "components/viz/common/resources/shared_image_format.h"
|
#include "components/viz/common/resources/shared_image_format.h"
|
||||||
#include "gpu/command_buffer/client/client_shared_image.h"
|
#include "gpu/command_buffer/client/client_shared_image.h"
|
||||||
#include "gpu/command_buffer/client/shared_image_interface.h"
|
#include "gpu/command_buffer/client/shared_image_interface.h"
|
||||||
|
#include "gpu/command_buffer/common/shared_image_pool_id.h"
|
||||||
#include "gpu/command_buffer/common/shared_image_usage.h"
|
#include "gpu/command_buffer/common/shared_image_usage.h"
|
||||||
#include "gpu/command_buffer/common/sync_token.h"
|
#include "gpu/command_buffer/common/sync_token.h"
|
||||||
#include "gpu/gpu_export.h"
|
#include "gpu/gpu_export.h"
|
||||||
@@ -90,7 +91,7 @@ class GPU_EXPORT ClientImage : public base::RefCounted<ClientImage> {
|
|||||||
void SetReleaseSyncToken(SyncToken release_sync_token);
|
void SetReleaseSyncToken(SyncToken release_sync_token);
|
||||||
|
|
||||||
// Only used for testing purposes.
|
// Only used for testing purposes.
|
||||||
int GetPoolIdForTesting() const;
|
const PoolId& GetPoolIdForTesting() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class base::RefCounted<ClientImage>;
|
friend class base::RefCounted<ClientImage>;
|
||||||
@@ -114,8 +115,8 @@ class GPU_EXPORT ClientImage : public base::RefCounted<ClientImage> {
|
|||||||
// the client.
|
// the client.
|
||||||
base::TimeTicks last_used_time_ = base::TimeTicks::Now();
|
base::TimeTicks last_used_time_ = base::TimeTicks::Now();
|
||||||
|
|
||||||
// Unique identifier to identify the pool this image belongs to.
|
// Unique unguessable identifier to identify the pool this image belongs to.
|
||||||
int pool_id_;
|
PoolId pool_id_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// This class is designed to handle bulk of functionality of the image pool.
|
// This class is designed to handle bulk of functionality of the image pool.
|
||||||
@@ -133,6 +134,7 @@ class GPU_EXPORT SharedImagePoolBase {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
SharedImagePoolBase(
|
SharedImagePoolBase(
|
||||||
|
const PoolId& pool_id,
|
||||||
const ImageInfo& image_info,
|
const ImageInfo& image_info,
|
||||||
const scoped_refptr<SharedImageInterface> sii,
|
const scoped_refptr<SharedImageInterface> sii,
|
||||||
std::optional<uint8_t> max_pool_size,
|
std::optional<uint8_t> max_pool_size,
|
||||||
@@ -145,7 +147,7 @@ class GPU_EXPORT SharedImagePoolBase {
|
|||||||
void ReconfigureInternal(const ImageInfo& image_info);
|
void ReconfigureInternal(const ImageInfo& image_info);
|
||||||
|
|
||||||
// Unique identifier to identify this pool and all images generated from it.
|
// Unique identifier to identify this pool and all images generated from it.
|
||||||
const int pool_id_;
|
const PoolId pool_id_;
|
||||||
|
|
||||||
// Information used to create new ClientSharedImage.
|
// Information used to create new ClientSharedImage.
|
||||||
ImageInfo image_info_;
|
ImageInfo image_info_;
|
||||||
@@ -249,7 +251,8 @@ class GPU_EXPORT SharedImagePool : public SharedImagePoolBase {
|
|||||||
scoped_refptr<SharedImageInterface> sii,
|
scoped_refptr<SharedImageInterface> sii,
|
||||||
std::optional<uint8_t> max_pool_size,
|
std::optional<uint8_t> max_pool_size,
|
||||||
std::optional<base::TimeDelta> unused_resource_expiration_time)
|
std::optional<base::TimeDelta> unused_resource_expiration_time)
|
||||||
: SharedImagePoolBase(image_info,
|
: SharedImagePoolBase(PoolId::Create(),
|
||||||
|
image_info,
|
||||||
std::move(sii),
|
std::move(sii),
|
||||||
std::move(max_pool_size),
|
std::move(max_pool_size),
|
||||||
std::move(unused_resource_expiration_time)) {}
|
std::move(unused_resource_expiration_time)) {}
|
||||||
|
@@ -14,7 +14,7 @@ PoolId PoolId::Create() {
|
|||||||
return PoolId(base::UnguessableToken::Create());
|
return PoolId(base::UnguessableToken::Create());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string PoolId::ToDebugString() const {
|
std::string PoolId::ToString() const {
|
||||||
return token_.ToString();
|
return token_.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,8 +20,8 @@ class GPU_EXPORT PoolId {
|
|||||||
// Creates a new PoolId with a cryptographically random value.
|
// Creates a new PoolId with a cryptographically random value.
|
||||||
static PoolId Create();
|
static PoolId Create();
|
||||||
|
|
||||||
// Generates a debug string representation of the PoolId.
|
// Generates a string representation of the PoolId.
|
||||||
std::string ToDebugString() const;
|
std::string ToString() const;
|
||||||
|
|
||||||
bool operator==(const PoolId& other) const { return token_ == other.token_; }
|
bool operator==(const PoolId& other) const { return token_ == other.token_; }
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user