Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2863)

Unified Diff: cc/trees/layer_tree_host.cc

Issue 57713004: Make tree id sequence in LayerTreeHost thread-safe. (Closed) Base URL: https://git.chromium.org/chromium/src.git@master
Patch Set: rebase to upstream Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host.cc
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index b0eed2f63205e01af80d600a73218404ec108179..c14736a939ed6f9fb213dbbca516fb4e8b776c0b 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -11,10 +11,12 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
+#include "base/lazy_instance.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
+#include "base/synchronization/lock.h"
#include "cc/animation/animation_registrar.h"
#include "cc/animation/layer_animation_controller.h"
#include "cc/base/math_util.h"
@@ -41,7 +43,14 @@
#include "ui/gfx/size_conversions.h"
namespace {
-static int s_num_layer_tree_instances;
+static base::LazyInstance<base::Lock>::Leaky
+ s_next_tree_id_lock = LAZY_INSTANCE_INITIALIZER;
+
+inline int GetNextTreeId() {
+ static int s_next_tree_id = 1;
+ base::AutoLock lock(s_next_tree_id_lock.Get());
caseq 2013/11/07 09:20:03 Any reason to not use StaticAtomicSequenceNumber h
dshwang 2013/11/07 09:46:03 Hi, Patch Set 1 used AtomicSequenceNumber, but Ato
+ return s_next_tree_id++;
+}
}
namespace cc {
@@ -89,10 +98,6 @@ UIResourceRequest& UIResourceRequest::operator=(
UIResourceRequest::~UIResourceRequest() {}
-bool LayerTreeHost::AnyLayerTreeHostInstanceExists() {
- return s_num_layer_tree_instances > 0;
-}
-
scoped_ptr<LayerTreeHost> LayerTreeHost::Create(
LayerTreeHostClient* client,
SharedBitmapManager* manager,
@@ -105,8 +110,6 @@ scoped_ptr<LayerTreeHost> LayerTreeHost::Create(
return layer_tree_host.Pass();
}
-static int s_next_tree_id = 1;
-
LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client,
SharedBitmapManager* manager,
const LayerTreeSettings& settings)
@@ -135,12 +138,11 @@ LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client,
partial_texture_update_requests_(0),
in_paint_layer_contents_(false),
total_frames_used_for_lcd_text_metrics_(0),
- tree_id_(s_next_tree_id++),
+ tree_id_(GetNextTreeId()),
next_commit_forces_redraw_(false),
shared_bitmap_manager_(manager) {
if (settings_.accelerated_animation_enabled)
animation_registrar_ = AnimationRegistrar::Create();
- s_num_layer_tree_instances++;
rendering_stats_instrumentation_->set_record_rendering_stats(
debug_state_.RecordRenderingStats());
}
@@ -182,8 +184,6 @@ LayerTreeHost::~LayerTreeHost() {
proxy_->Stop();
}
- s_num_layer_tree_instances--;
-
if (root_layer_.get()) {
// The layer tree must be destroyed before the layer tree host. We've
// made a contract with our animation controllers that the registrar
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698