Commit 2ae1a08f authored by Khushal's avatar Khushal Committed by Commit Bot

gpu: Handle invalid discardable handle allocation.

R=ericrk@chromium.org

Bug: 866434
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I6c47cf25c2f15c668b50622896170886e23e6658
Reviewed-on: https://chromium-review.googlesource.com/1147253Reviewed-by: default avatarEric Karl <ericrk@chromium.org>
Commit-Queue: Khushal <khushalsagar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#577264}
parent b6f6a6e5
...@@ -60,9 +60,12 @@ ClientFontManager::~ClientFontManager() = default; ...@@ -60,9 +60,12 @@ ClientFontManager::~ClientFontManager() = default;
SkDiscardableHandleId ClientFontManager::createHandle() { SkDiscardableHandleId ClientFontManager::createHandle() {
SkDiscardableHandleId handle_id = ++last_allocated_handle_id_; SkDiscardableHandleId handle_id = ++last_allocated_handle_id_;
discardable_handle_map_[handle_id] = auto client_handle =
client_discardable_manager_.CreateHandle(command_buffer_); client_discardable_manager_.CreateHandle(command_buffer_);
if (client_handle.is_null())
return kInvalidSkDiscardableHandleId;
discardable_handle_map_[handle_id] = client_handle;
// Handles start with a ref-count. // Handles start with a ref-count.
locked_handles_.insert(handle_id); locked_handles_.insert(handle_id);
return handle_id; return handle_id;
...@@ -74,7 +77,9 @@ bool ClientFontManager::lockHandle(SkDiscardableHandleId handle_id) { ...@@ -74,7 +77,9 @@ bool ClientFontManager::lockHandle(SkDiscardableHandleId handle_id) {
return true; return true;
auto it = discardable_handle_map_.find(handle_id); auto it = discardable_handle_map_.find(handle_id);
DCHECK(it != discardable_handle_map_.end()); if (it == discardable_handle_map_.end())
return false;
bool locked = client_discardable_manager_.LockHandle(it->second); bool locked = client_discardable_manager_.LockHandle(it->second);
if (locked) { if (locked) {
locked_handles_.insert(handle_id); locked_handles_.insert(handle_id);
......
...@@ -36,6 +36,8 @@ class RASTER_EXPORT ClientFontManager ...@@ -36,6 +36,8 @@ class RASTER_EXPORT ClientFontManager
SkStrikeServer* strike_server() { return &strike_server_; } SkStrikeServer* strike_server() { return &strike_server_; }
private: private:
static constexpr SkDiscardableHandleId kInvalidSkDiscardableHandleId = -1;
Client* client_; Client* client_;
CommandBuffer* command_buffer_; CommandBuffer* command_buffer_;
......
...@@ -29,6 +29,9 @@ void ClientTransferCache::UnmapAndCreateEntry(uint32_t type, uint32_t id) { ...@@ -29,6 +29,9 @@ void ClientTransferCache::UnmapAndCreateEntry(uint32_t type, uint32_t id) {
base::AutoLock hold(lock_); base::AutoLock hold(lock_);
ClientDiscardableHandle::Id discardable_handle_id = ClientDiscardableHandle::Id discardable_handle_id =
discardable_manager_.CreateHandle(client_->command_buffer()); discardable_manager_.CreateHandle(client_->command_buffer());
if (discardable_handle_id.is_null())
return;
ClientDiscardableHandle handle = ClientDiscardableHandle handle =
discardable_manager_.GetHandle(discardable_handle_id); discardable_manager_.GetHandle(discardable_handle_id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment