0

Revert raw_ptr rewrites based on sampling profiler data

Sampling profiler data revealed some raw_ptr in performance sensitive code.

Analysis: 
https: //docs.google.com/spreadsheets/d/18l_zAaKE1OaRfcPs8kL9ef7dyyGfh3oO4mh5LoytKYo/edit?resourcekey=0--oPpC5b7ENQw5ZjgB5hvfw#gid=1069036117
Bug: 1287151
Change-Id: Id24e4850221468fbdf413dc47ba2f4ca9b1855d7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3372102
Reviewed-by: Joe DeBlasio <jdeblasio@chromium.org>
Reviewed-by: Dominic Farolino <dom@chromium.org>
Reviewed-by: Bartek Nowierski <bartekn@chromium.org>
Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: danakj chromium <danakj@chromium.org>
Reviewed-by: Finnur Thorarinsson <finnur@chromium.org>
Commit-Queue: Keishi Hattori <keishi@chromium.org>
Cr-Commit-Position: refs/heads/main@{#960441}
This commit is contained in:
Keishi Hattori
2022-01-18 16:48:45 +00:00
committed by Chromium LUCI CQ
parent c509d3afaa
commit 7ccb88c455
14 changed files with 115 additions and 44 deletions

@ -14,7 +14,6 @@
#include "base/check_op.h"
#include "base/containers/span.h"
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/strings/string_piece.h"
@ -255,7 +254,7 @@ class BASE_EXPORT Pickle {
}
const char* payload() const {
return reinterpret_cast<const char*>(header_.get()) + header_size_;
return reinterpret_cast<const char*>(header_) + header_size_;
}
// Returns the address of the byte immediately following the currently valid
@ -271,7 +270,7 @@ class BASE_EXPORT Pickle {
size_t header_size() const { return header_size_; }
char* mutable_payload() {
return reinterpret_cast<char*>(header_.get()) + header_size_;
return reinterpret_cast<char*>(header_) + header_size_;
}
size_t capacity_after_header() const {
@ -313,7 +312,9 @@ class BASE_EXPORT Pickle {
private:
friend class PickleIterator;
raw_ptr<Header> header_;
// `header_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
Header* header_;
size_t header_size_; // Supports extra data between header and payload.
// Allocation size of payload (or -1 if allocation is const). Note: this
// doesn't count the header.

@ -135,7 +135,9 @@ class BASE_EXPORT TimerBase {
// Detects when the scheduled task is deleted before being executed. Null when
// there is no scheduled task.
raw_ptr<TaskDestructionDetector> task_destruction_detector_
// `task_destruction_detector_` is not a raw_ptr<...> for performance reasons
// (based on analysis of sampling profiler data).
TaskDestructionDetector* task_destruction_detector_
GUARDED_BY_CONTEXT(sequence_checker_);
// If true, |user_task_| is scheduled to run sometime in the future.

@ -8,7 +8,6 @@
#include <stddef.h>
#include "base/containers/stack_container.h"
#include "base/memory/raw_ptr.h"
#include "cc/cc_export.h"
#include "cc/tiles/picture_layer_tiling_set.h"
#include "cc/tiles/prioritized_tile.h"
@ -195,7 +194,9 @@ class CC_EXPORT TilingSetRasterQueueAll {
void MakeTilingIterator(IteratorType type, PictureLayerTiling* tiling);
void AdvanceToNextStage();
raw_ptr<PictureLayerTilingSet> tiling_set_;
// `tiling_set_` is not a raw_ptr<...> for performance reasons (based on
// analysis of sampling profiler data).
PictureLayerTilingSet* tiling_set_;
struct IterationStage {
IterationStage(IteratorType type, TilePriority::PriorityBin bin);

@ -11,7 +11,6 @@
#include <utility>
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "base/values.h"
#include "components/site_engagement/core/mojom/site_engagement_details.mojom-forward.h"
@ -215,7 +214,9 @@ class SiteEngagementScore {
// The clock used to vend times. Enables time travelling in tests. Owned by
// the SiteEngagementService.
raw_ptr<base::Clock> clock_;
// `clock_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
base::Clock* clock_;
// |raw_score_| is the score before any decay is applied.
double raw_score_;
@ -240,7 +241,9 @@ class SiteEngagementScore {
GURL origin_;
// The settings to write this score to when Commit() is called.
raw_ptr<HostContentSettingsMap> settings_map_;
// `settings_map_` is not a raw_ptr<...> for performance reasons (based on
// analysis of sampling profiler data).
HostContentSettingsMap* settings_map_;
};
} // namespace site_engagement

@ -10,6 +10,7 @@
#include <string>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "content/common/content_export.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "url/gurl.h"

@ -6,7 +6,6 @@
#define EXTENSIONS_BROWSER_LAZY_CONTEXT_TASK_QUEUE_H_
#include "base/callback.h"
#include "base/memory/raw_ptr.h"
#include "extensions/common/extension_id.h"
#include "url/gurl.h"
@ -32,16 +31,22 @@ class LazyContextTaskQueue {
// consumers that add tasks to LazyContextTaskQueue.
struct ContextInfo {
const ExtensionId extension_id;
const raw_ptr<content::RenderProcessHost> render_process_host;
// `render_process_host` is not a raw_ptr<...> for performance reasons
// (based on analysis of sampling profiler data).
content::RenderProcessHost* const render_process_host;
const int64_t service_worker_version_id;
const int worker_thread_id;
const GURL url;
// TODO(dbertoni): This needs to be initialized for the Service Worker
// version of the constructor.
const raw_ptr<content::BrowserContext> browser_context = nullptr;
// `browser_context` is not a raw_ptr<...> for performance reasons (based on
// analysis of sampling profiler data).
content::BrowserContext* const browser_context = nullptr;
// This data member will have a nullptr value for Service Worker-related
// tasks.
const raw_ptr<content::WebContents> web_contents = nullptr;
// `web_contents` is not a raw_ptr<...> for performance reasons (based on
// analysis of sampling profiler data).
content::WebContents* const web_contents = nullptr;
explicit ContextInfo(ExtensionHost* host);

@ -10,7 +10,6 @@
#include <memory>
#include <queue>
#include "base/memory/raw_ptr.h"
#include "mojo/core/atomic_flag.h"
#include "mojo/core/dispatcher.h"
#include "mojo/core/ports/port_ref.h"
@ -92,7 +91,9 @@ class MessagePipeDispatcher : public Dispatcher {
void OnPortStatusChanged();
// These are safe to access from any thread without locking.
const raw_ptr<NodeController> node_controller_;
// `node_controller_` is not a raw_ptr<...> for performance reasons (based on
// analysis of sampling profiler data).
NodeController* const node_controller_;
const ports::PortRef port_;
const uint64_t pipe_id_;
const int endpoint_;

@ -7,7 +7,6 @@
#include <type_traits>
#include "base/memory/raw_ptr.h"
#include "mojo/public/cpp/bindings/lib/array_internal.h"
#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
#include "mojo/public/cpp/bindings/lib/serialization_forward.h"
@ -37,8 +36,12 @@ class ArrayDataViewImpl<
const T* data() const { return data_->storage(); }
protected:
raw_ptr<Data_> data_;
raw_ptr<Message> message_;
// `data_` is not a raw_ptr<...> for performance reasons (based on analysis of
// sampling profiler data).
Data_* data_;
// `message_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
Message* message_;
};
template <typename T>
@ -55,8 +58,12 @@ class ArrayDataViewImpl<
bool operator[](size_t index) const { return data_->at(index); }
protected:
raw_ptr<Data_> data_;
raw_ptr<Message> message_;
// `data_` is not a raw_ptr<...> for performance reasons (based on analysis of
// sampling profiler data).
Data_* data_;
// `message_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
Message* message_;
};
template <typename T>
@ -83,8 +90,12 @@ class ArrayDataViewImpl<
}
protected:
raw_ptr<Data_> data_;
raw_ptr<Message> message_;
// `data_` is not a raw_ptr<...> for performance reasons (based on analysis of
// sampling profiler data).
Data_* data_;
// `message_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
Message* message_;
};
template <typename T>
@ -111,8 +122,12 @@ class ArrayDataViewImpl<
}
protected:
raw_ptr<Data_> data_;
raw_ptr<Message> message_;
// `data_` is not a raw_ptr<...> for performance reasons (based on analysis of
// sampling profiler data).
Data_* data_;
// `message_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
Message* message_;
};
template <typename T>
@ -134,8 +149,12 @@ class ArrayDataViewImpl<
}
protected:
raw_ptr<Data_> data_;
raw_ptr<Message> message_;
// `data_` is not a raw_ptr<...> for performance reasons (based on analysis of
// sampling profiler data).
Data_* data_;
// `message_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
Message* message_;
};
template <typename T>
@ -162,8 +181,12 @@ class ArrayDataViewImpl<
}
protected:
raw_ptr<Data_> data_;
raw_ptr<Message> message_;
// `data_` is not a raw_ptr<...> for performance reasons (based on analysis of
// sampling profiler data).
Data_* data_;
// `message_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
Message* message_;
};
template <typename T>
@ -187,8 +210,12 @@ class ArrayDataViewImpl<
}
protected:
raw_ptr<Data_> data_;
raw_ptr<Message> message_;
// `data_` is not a raw_ptr<...> for performance reasons (based on analysis of
// sampling profiler data).
Data_* data_;
// `message_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
Message* message_;
};
} // namespace internal

@ -12,7 +12,6 @@
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
@ -296,7 +295,9 @@ class COMPONENT_EXPORT(MOJO_CPP_BINDINGS) Connector : public MessageReceiver {
base::OnceClosure connection_error_handler_;
ScopedMessagePipeHandle message_pipe_;
raw_ptr<MessageReceiver> incoming_receiver_ = nullptr;
// `incoming_receiver_` is not a raw_ptr<...> for performance reasons (based
// on analysis of sampling profiler data).
MessageReceiver* incoming_receiver_ = nullptr;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
std::unique_ptr<SimpleWatcher> handle_watcher_;
@ -341,7 +342,9 @@ class COMPONENT_EXPORT(MOJO_CPP_BINDINGS) Connector : public MessageReceiver {
// A cached pointer to the RunLoopNestingObserver for the thread on which this
// Connector was created.
raw_ptr<RunLoopNestingObserver> nesting_observer_ = nullptr;
// `nesting_observer_` is not a raw_ptr<...> for performance reasons (based on
// analysis of sampling profiler data).
RunLoopNestingObserver* nesting_observer_ = nullptr;
// |true| iff the Connector is currently dispatching a message. Used to detect
// nested dispatch operations.

@ -293,10 +293,13 @@ class COMPONENT_EXPORT(MOJO_CPP_BINDINGS) InterfaceEndpointClient
ScopedInterfaceEndpointHandle handle_;
std::unique_ptr<AssociatedGroup> associated_group_;
raw_ptr<InterfaceEndpointController> controller_ = nullptr;
// `controller_` is not a raw_ptr<...> for performance reasons (based on
// analysis of sampling profiler data).
InterfaceEndpointController* controller_ = nullptr;
const raw_ptr<MessageReceiverWithResponderStatus> incoming_receiver_ =
nullptr;
// `incoming_receiver_` is not a raw_ptr<...> for performance reasons (based
// on analysis of sampling profiler data).
MessageReceiverWithResponderStatus* const incoming_receiver_ = nullptr;
HandleIncomingMessageThunk thunk_{this};
MessageDispatcher dispatcher_;

@ -6,7 +6,6 @@
#define MOJO_PUBLIC_CPP_BINDINGS_LIB_MAY_AUTO_LOCK_H_
#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
#include "base/synchronization/lock.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
@ -34,7 +33,9 @@ class COMPONENT_EXPORT(MOJO_CPP_BINDINGS_BASE) MayAutoLock {
}
private:
raw_ptr<base::Lock> lock_;
// `lock_` is not a raw_ptr<...> for performance reasons: on-stack pointer +
// based on analysis of sampling profiler data.
base::Lock* lock_;
};
// Similar to base::AutoUnlock, except that it does nothing if |lock| passed
@ -58,7 +59,9 @@ class COMPONENT_EXPORT(MOJO_CPP_BINDINGS_BASE) MayAutoUnlock {
}
private:
raw_ptr<base::Lock> lock_;
// `lock_` is not a raw_ptr<...> for performance reasons: on-stack pointer +
// based on analysis of sampling profiler data.
base::Lock* lock_;
};
} // namespace internal

@ -14,7 +14,6 @@
#include "base/component_export.h"
#include "base/containers/circular_deque.h"
#include "base/containers/small_map.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/sequence_checker.h"
#include "base/synchronization/lock.h"
@ -305,7 +304,9 @@ class COMPONENT_EXPORT(MOJO_CPP_BINDINGS) MultiplexRouter
scoped_refptr<base::SequencedTaskRunner> task_runner_;
// Owned by |dispatcher_| below.
raw_ptr<MessageHeaderValidator> header_validator_ = nullptr;
// `header_validator_` is not a raw_ptr<...> for performance reasons (based on
// analysis of sampling profiler data).
MessageHeaderValidator* header_validator_ = nullptr;
MessageDispatcher dispatcher_;
Connector connector_;

@ -342,6 +342,25 @@ mojo::internal::MultiplexRouter::MessageWrapper::router_
tracing::(anonymous namespace)::LazyLegacyEventInitializer::legacy_event_
tracing::(anonymous namespace)::LazyLegacyEventInitializer::track_event_
url::StdStringCanonOutput::str_
base::Pickle::header_
base::internal::TimerBase::task_destruction_detector_
cc::TilingSetRasterQueueAll::tiling_set_
site_engagement::SiteEngagementScore::clock_
site_engagement::SiteEngagementScore::settings_map_
extensions::LazyContextTaskQueue::ContextInfo::render_process_host
extensions::LazyContextTaskQueue::ContextInfo::browser_context
extensions::LazyContextTaskQueue::ContextInfo::web_contents
mojo::core::MessagePipeDispatcher::node_controller_
mojo::internal::ArrayDataViewImpl::data_
mojo::internal::ArrayDataViewImpl::message_
mojo::Connector::incoming_receiver_
mojo::Connector::nesting_observer_
mojo::InterfaceEndpointClient::controller_
mojo::InterfaceEndpointClient::incoming_receiver_
mojo::internal::MayAutoLock::lock_
mojo::internal::MayAutoUnlock::lock_
mojo::internal::MultiplexRouter::header_validator_
url::CanonOutputT::buffer_
# Populated manually - type is unsupported by raw_ptr to avoid being used in
# performance sensitive base::Unretained

@ -12,7 +12,6 @@
#include "base/component_export.h"
#include "base/export_template.h"
#include "base/memory/raw_ptr.h"
#include "url/third_party/mozilla/url_parse.h"
namespace url {
@ -140,7 +139,9 @@ class CanonOutputT {
return true;
}
raw_ptr<T> buffer_;
// `buffer_` is not a raw_ptr<...> for performance reasons (based on analysis
// of sampling profiler data).
T* buffer_;
int buffer_len_;
// Used characters in the buffer.