From bf60b1e1e9213f7f2ecf2cc4491cba75020d7ca4 Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Mon, 30 May 2022 17:14:19 -0700 Subject: [PATCH] Pass std::string_view by value not by ref String views are small, cheap objects that fit in a couple registers, so passing by value avoids pointer indirection and thus a memory load. Fun related reading for future archaeologists: https://quuxplusone.github.io/blog/2021/11/09/pass-string-view-by-value/ And a Windows-specific footnote: https://quuxplusone.github.io/blog/2021/11/19/string-view-by-value-ps/ No test change since there is no semantic change. --- impeller/compiler/reflector.cc | 2 +- impeller/compiler/reflector.h | 3 +-- impeller/renderer/backend/gles/shader_library_gles.cc | 2 +- impeller/renderer/backend/gles/shader_library_gles.h | 5 ++--- impeller/renderer/backend/gles/texture_gles.cc | 2 +- impeller/renderer/backend/gles/texture_gles.h | 2 +- impeller/renderer/backend/metal/shader_library_mtl.h | 5 ++--- impeller/renderer/backend/metal/shader_library_mtl.mm | 2 +- impeller/renderer/backend/metal/texture_mtl.h | 2 +- impeller/renderer/backend/metal/texture_mtl.mm | 2 +- impeller/renderer/shader_key.h | 2 +- impeller/renderer/shader_library.h | 2 +- impeller/renderer/texture.h | 2 +- 13 files changed, 15 insertions(+), 18 deletions(-) diff --git a/impeller/compiler/reflector.cc b/impeller/compiler/reflector.cc index 85b66408b5f70..683750c0fcecb 100644 --- a/impeller/compiler/reflector.cc +++ b/impeller/compiler/reflector.cc @@ -304,7 +304,7 @@ static std::string ToString(CompilerBackend::Type type) { } std::shared_ptr Reflector::InflateTemplate( - const std::string_view& tmpl) const { + std::string_view tmpl) const { inja::Environment env; env.set_trim_blocks(true); env.set_lstrip_blocks(true); diff --git a/impeller/compiler/reflector.h b/impeller/compiler/reflector.h index 4e14d5157a526..e098270e2c6b0 100644 --- a/impeller/compiler/reflector.h +++ b/impeller/compiler/reflector.h @@ -91,8 +91,7 @@ class Reflector { std::shared_ptr GenerateReflectionCC() const; - std::shared_ptr InflateTemplate( - const std::string_view& tmpl) const; + std::shared_ptr InflateTemplate(std::string_view tmpl) const; std::optional ReflectResource( const spirv_cross::Resource& resource) const; diff --git a/impeller/renderer/backend/gles/shader_library_gles.cc b/impeller/renderer/backend/gles/shader_library_gles.cc index 8af6e62d98558..39c673ee93041 100644 --- a/impeller/renderer/backend/gles/shader_library_gles.cc +++ b/impeller/renderer/backend/gles/shader_library_gles.cc @@ -94,7 +94,7 @@ bool ShaderLibraryGLES::IsValid() const { // |ShaderLibrary| std::shared_ptr ShaderLibraryGLES::GetFunction( - const std::string_view& name, + std::string_view name, ShaderStage stage) { const auto key = ShaderKey{name, stage}; if (auto found = functions_.find(key); found != functions_.end()) { diff --git a/impeller/renderer/backend/gles/shader_library_gles.h b/impeller/renderer/backend/gles/shader_library_gles.h index d81c5661c35d1..3afd096db4cd2 100644 --- a/impeller/renderer/backend/gles/shader_library_gles.h +++ b/impeller/renderer/backend/gles/shader_library_gles.h @@ -30,9 +30,8 @@ class ShaderLibraryGLES final : public ShaderLibrary { std::vector> shader_libraries); // |ShaderLibrary| - std::shared_ptr GetFunction( - const std::string_view& name, - ShaderStage stage) override; + std::shared_ptr GetFunction(std::string_view name, + ShaderStage stage) override; FML_DISALLOW_COPY_AND_ASSIGN(ShaderLibraryGLES); }; diff --git a/impeller/renderer/backend/gles/texture_gles.cc b/impeller/renderer/backend/gles/texture_gles.cc index 8cf99d886d513..9e9df4c17c7c7 100644 --- a/impeller/renderer/backend/gles/texture_gles.cc +++ b/impeller/renderer/backend/gles/texture_gles.cc @@ -79,7 +79,7 @@ bool TextureGLES::IsValid() const { } // |Texture| -void TextureGLES::SetLabel(const std::string_view& label) { +void TextureGLES::SetLabel(std::string_view label) { reactor_->SetDebugLabel(handle_, std::string{label.data(), label.size()}); } diff --git a/impeller/renderer/backend/gles/texture_gles.h b/impeller/renderer/backend/gles/texture_gles.h index 4d0f4f909e907..ceb86501be30f 100644 --- a/impeller/renderer/backend/gles/texture_gles.h +++ b/impeller/renderer/backend/gles/texture_gles.h @@ -62,7 +62,7 @@ class TextureGLES final : public Texture, bool is_wrapped); // |Texture| - void SetLabel(const std::string_view& label) override; + void SetLabel(std::string_view label) override; // |Texture| bool OnSetContents(const uint8_t* contents, diff --git a/impeller/renderer/backend/metal/shader_library_mtl.h b/impeller/renderer/backend/metal/shader_library_mtl.h index 53ac7a407115a..1949b7a11af41 100644 --- a/impeller/renderer/backend/metal/shader_library_mtl.h +++ b/impeller/renderer/backend/metal/shader_library_mtl.h @@ -39,9 +39,8 @@ class ShaderLibraryMTL final : public ShaderLibrary { ShaderLibraryMTL(NSArray>* libraries); // |ShaderLibrary| - std::shared_ptr GetFunction( - const std::string_view& name, - ShaderStage stage) override; + std::shared_ptr GetFunction(std::string_view name, + ShaderStage stage) override; FML_DISALLOW_COPY_AND_ASSIGN(ShaderLibraryMTL); }; diff --git a/impeller/renderer/backend/metal/shader_library_mtl.mm b/impeller/renderer/backend/metal/shader_library_mtl.mm index 6844f4e463d6a..3f2589738c10a 100644 --- a/impeller/renderer/backend/metal/shader_library_mtl.mm +++ b/impeller/renderer/backend/metal/shader_library_mtl.mm @@ -24,7 +24,7 @@ } std::shared_ptr ShaderLibraryMTL::GetFunction( - const std::string_view& name, + std::string_view name, ShaderStage stage) { if (!IsValid()) { return nullptr; diff --git a/impeller/renderer/backend/metal/texture_mtl.h b/impeller/renderer/backend/metal/texture_mtl.h index d178062194c47..ef61433449119 100644 --- a/impeller/renderer/backend/metal/texture_mtl.h +++ b/impeller/renderer/backend/metal/texture_mtl.h @@ -27,7 +27,7 @@ class TextureMTL final : public Texture, bool is_valid_ = false; // |Texture| - void SetLabel(const std::string_view& label) override; + void SetLabel(std::string_view label) override; // |Texture| bool OnSetContents(const uint8_t* contents, diff --git a/impeller/renderer/backend/metal/texture_mtl.mm b/impeller/renderer/backend/metal/texture_mtl.mm index 0fa954570d859..663a76cf831af 100644 --- a/impeller/renderer/backend/metal/texture_mtl.mm +++ b/impeller/renderer/backend/metal/texture_mtl.mm @@ -26,7 +26,7 @@ TextureMTL::~TextureMTL() = default; -void TextureMTL::SetLabel(const std::string_view& label) { +void TextureMTL::SetLabel(std::string_view label) { [texture_ setLabel:@(label.data())]; } diff --git a/impeller/renderer/shader_key.h b/impeller/renderer/shader_key.h index 197ea5bf56803..24e7c0a455a72 100644 --- a/impeller/renderer/shader_key.h +++ b/impeller/renderer/shader_key.h @@ -18,7 +18,7 @@ struct ShaderKey { std::string name; ShaderStage stage = ShaderStage::kUnknown; - ShaderKey(const std::string_view& p_name, ShaderStage p_stage) + ShaderKey(std::string_view p_name, ShaderStage p_stage) : name({p_name.data(), p_name.size()}), stage(p_stage) {} struct Hash { diff --git a/impeller/renderer/shader_library.h b/impeller/renderer/shader_library.h index 256e614254813..94997ca58ddec 100644 --- a/impeller/renderer/shader_library.h +++ b/impeller/renderer/shader_library.h @@ -22,7 +22,7 @@ class ShaderLibrary { virtual bool IsValid() const = 0; virtual std::shared_ptr GetFunction( - const std::string_view& name, + std::string_view name, ShaderStage stage) = 0; protected: diff --git a/impeller/renderer/texture.h b/impeller/renderer/texture.h index b58b9a7f69c8c..2132587efc8b6 100644 --- a/impeller/renderer/texture.h +++ b/impeller/renderer/texture.h @@ -18,7 +18,7 @@ class Texture { public: virtual ~Texture(); - virtual void SetLabel(const std::string_view& label) = 0; + virtual void SetLabel(std::string_view label) = 0; [[nodiscard]] bool SetContents(const uint8_t* contents, size_t length,