Commit de2037a5 authored by Alex Zhang's avatar Alex Zhang Committed by Commit Bot

ResourceSettings struct traits

To plumb RendererSettings through between browser and viz, we need
struct traits for it and its members. ResourceSettings is a member of
RendererSettings.

This CL adds struct traits for ResourceSettings and a unit test for
the struct traits.

Bug: 732825
Change-Id: I03010130b3614cc316f6fc234dea4b5bfbf3fbf5
Reviewed-on: https://chromium-review.googlesource.com/575209Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarFady Samuel <fsamuel@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Xingyu Zhang <staraz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#488689}
parent 317adc6a
...@@ -35,6 +35,7 @@ _typemap_imports = [ ...@@ -35,6 +35,7 @@ _typemap_imports = [
"//services/ui/gpu/interfaces/typemaps.gni", "//services/ui/gpu/interfaces/typemaps.gni",
"//services/ui/public/interfaces/cursor/typemaps.gni", "//services/ui/public/interfaces/cursor/typemaps.gni",
"//services/ui/public/interfaces/ime/typemaps.gni", "//services/ui/public/interfaces/ime/typemaps.gni",
"//services/viz/public/interfaces/compositing/typemaps.gni",
"//skia/public/interfaces/typemaps.gni", "//skia/public/interfaces/typemaps.gni",
"//third_party/WebKit/public/public_typemaps.gni", "//third_party/WebKit/public/public_typemaps.gni",
"//ui/base/mojo/typemaps.gni", "//ui/base/mojo/typemaps.gni",
......
...@@ -28,6 +28,7 @@ service_test("services_unittests") { ...@@ -28,6 +28,7 @@ service_test("services_unittests") {
"//services/preferences:tests", "//services/preferences:tests",
"//services/resource_coordinator:tests", "//services/resource_coordinator:tests",
"//services/shape_detection:tests", "//services/shape_detection:tests",
"//services/viz/public/interfaces/compositing:tests",
] ]
} }
......
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//mojo/public/tools/bindings/mojom.gni")
mojom("interfaces") {
sources = [
"resource_settings.mojom",
]
public_deps = [
"//ui/gfx/mojo",
]
}
source_set("tests") {
testonly = true
sources = [
"struct_traits_unittest.cc",
]
deps = [
":interfaces",
"//base/test:test_support",
"//media/capture/mojo:capture_types",
"//services/service_manager/public/cpp",
"//services/service_manager/public/cpp:service_test_support",
"//testing/gtest",
"//ui/gfx:test_support",
]
}
include_rules = [
"+components/viz",
"+ui/gfx/mojo",
]
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS
per-file *_struct_traits*.*=set noparent
per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
per-file *.typemap=set noparent
per-file *.typemap=file://ipc/SECURITY_OWNERS
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module viz.mojom;
import "ui/gfx/mojo/buffer_types.mojom";
struct BufferToTextureTargetKey {
gfx.mojom.BufferUsage usage;
gfx.mojom.BufferFormat format;
};
struct BufferToTextureTargetPair {
BufferToTextureTargetKey key;
uint32 value;
};
// Corresponds to |viz::ResourceSettings| in
// components/viz/common/resources/resource_settings.h
struct ResourceSettings {
uint32 texture_id_allocation_chunk_size;
bool use_gpu_memory_buffer_resources;
array<BufferToTextureTargetPair> buffer_to_texture_target_map;
};
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
mojom = "//services/viz/public/interfaces/compositing/resource_settings.mojom"
public_headers = [ "//components/viz/common/resources/resource_settings.h" ]
traits_headers = [ "//services/viz/public/interfaces/compositing/resource_settings_struct_traits.h" ]
deps = [
"//cc",
"//mojo/common:struct_traits",
"//ui/gfx/mojo",
]
sources = [
"resource_settings_struct_traits.cc",
]
type_mappings = [
"viz.mojom.BufferToTextureTargetKey=std::pair<gfx::BufferUsage, gfx::BufferFormat>",
"viz.mojom.ResourceSettings=viz::ResourceSettings",
]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/viz/public/interfaces/compositing/resource_settings_struct_traits.h"
namespace mojo {
// static
bool StructTraits<viz::mojom::BufferToTextureTargetKeyDataView,
viz::BufferToTextureTargetKey>::
Read(viz::mojom::BufferToTextureTargetKeyDataView data,
viz::BufferToTextureTargetKey* out) {
return data.ReadUsage(&out->first) && data.ReadFormat(&out->second);
}
// static
bool StructTraits<viz::mojom::ResourceSettingsDataView, viz::ResourceSettings>::
Read(viz::mojom::ResourceSettingsDataView data,
viz::ResourceSettings* out) {
out->texture_id_allocation_chunk_size =
data.texture_id_allocation_chunk_size();
out->use_gpu_memory_buffer_resources = data.use_gpu_memory_buffer_resources();
mojo::ArrayDataView<viz::mojom::BufferToTextureTargetPairDataView>
buffer_to_texture_target_array;
data.GetBufferToTextureTargetMapDataView(&buffer_to_texture_target_array);
for (size_t i = 0; i < buffer_to_texture_target_array.size(); ++i) {
viz::mojom::BufferToTextureTargetPairDataView buffer_to_texture_target_pair;
buffer_to_texture_target_array.GetDataView(i,
&buffer_to_texture_target_pair);
viz::BufferToTextureTargetKey key;
if (!buffer_to_texture_target_pair.ReadKey(&key))
return false;
auto& value = out->buffer_to_texture_target_map[key];
value = buffer_to_texture_target_pair.value();
}
return true;
}
} // namespace mojo
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_VIZ_PUBLIC_INTERFACES_COMPOSITING_RESOURCE_SETTINGS_STRUCT_TRAITS_H_
#define SERVICES_VIZ_PUBLIC_INTERFACES_COMPOSITING_RESOURCE_SETTINGS_STRUCT_TRAITS_H_
#include "components/viz/common/resources/resource_settings.h"
#include "services/viz/public/interfaces/compositing/resource_settings.mojom.h"
#include "ui/gfx/mojo/buffer_types.mojom.h"
#include "ui/gfx/mojo/buffer_types_struct_traits.h"
namespace mojo {
template <>
struct ArrayTraits<viz::BufferToTextureTargetMap> {
using Element = viz::BufferToTextureTargetMap::value_type;
using Iterator = viz::BufferToTextureTargetMap::iterator;
using ConstIterator = viz::BufferToTextureTargetMap::const_iterator;
static ConstIterator GetBegin(const viz::BufferToTextureTargetMap& input) {
return input.begin();
}
static Iterator GetBegin(viz::BufferToTextureTargetMap& input) {
return input.begin();
}
static void AdvanceIterator(ConstIterator& iterator) { iterator++; }
static void AdvanceIterator(Iterator& iterator) { iterator++; }
static const Element& GetValue(ConstIterator& iterator) { return *iterator; }
static Element& GetValue(Iterator& iterator) { return *iterator; }
static size_t GetSize(const viz::BufferToTextureTargetMap& input) {
return input.size();
}
};
template <>
struct StructTraits<viz::mojom::BufferToTextureTargetKeyDataView,
std::pair<gfx::BufferUsage, gfx::BufferFormat>> {
static gfx::BufferUsage usage(const viz::BufferToTextureTargetKey& input) {
return input.first;
}
static gfx::BufferFormat format(const viz::BufferToTextureTargetKey& input) {
return input.second;
}
static bool Read(viz::mojom::BufferToTextureTargetKeyDataView data,
viz::BufferToTextureTargetKey* out);
};
template <>
struct StructTraits<viz::mojom::BufferToTextureTargetPairDataView,
viz::BufferToTextureTargetMap::value_type> {
static const std::pair<gfx::BufferUsage, gfx::BufferFormat>& key(
const viz::BufferToTextureTargetMap::value_type& input) {
return input.first;
}
static uint32_t value(
const viz::BufferToTextureTargetMap::value_type& input) {
return input.second;
}
};
template <>
struct StructTraits<viz::mojom::ResourceSettingsDataView,
viz::ResourceSettings> {
static size_t texture_id_allocation_chunk_size(
const viz::ResourceSettings& input) {
return input.texture_id_allocation_chunk_size;
}
static bool use_gpu_memory_buffer_resources(
const viz::ResourceSettings& input) {
return input.use_gpu_memory_buffer_resources;
}
static const viz::BufferToTextureTargetMap& buffer_to_texture_target_map(
const viz::ResourceSettings& input) {
return input.buffer_to_texture_target_map;
}
static bool Read(viz::mojom::ResourceSettingsDataView data,
viz::ResourceSettings* out);
};
} // namespace mojo
#endif // SERVICES_VIZ_PUBLIC_INTERFACES_COMPOSITING_RESOURCE_SETTINGS_STRUCT_TRAITS_H_
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <utility>
#include "base/message_loop/message_loop.h"
#include "components/viz/common/resources/resource_settings.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/viz/public/interfaces/compositing/resource_settings_struct_traits.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace viz {
namespace {
using StructTraitsTest = testing::Test;
TEST_F(StructTraitsTest, ResourceSettings) {
constexpr size_t kArbitrarySize = 32;
constexpr bool kArbitraryBool = true;
ResourceSettings input;
input.texture_id_allocation_chunk_size = kArbitrarySize;
input.use_gpu_memory_buffer_resources = kArbitraryBool;
input.buffer_to_texture_target_map =
DefaultBufferToTextureTargetMapForTesting();
ResourceSettings output;
mojom::ResourceSettings::Deserialize(
mojom::ResourceSettings::Serialize(&input), &output);
EXPECT_EQ(input.texture_id_allocation_chunk_size,
output.texture_id_allocation_chunk_size);
EXPECT_EQ(input.use_gpu_memory_buffer_resources,
output.use_gpu_memory_buffer_resources);
EXPECT_EQ(input.buffer_to_texture_target_map,
output.buffer_to_texture_target_map);
}
} // namespace
} // namespace viz
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
typemaps =
[ "//services/viz/public/interfaces/compositing/resource_settings.typemap" ]
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