Commit 3bc3b8b6 authored by Tibor Goldschwendt's avatar Tibor Goldschwendt Committed by Commit Bot

[vr] Measure text render speed in GTest

This change also adds a new target for performance tests in VR
and a target for dependencies shared among vr test targets.

Bug: 772551, 774636
Change-Id: I7de0cd8a5fcba3e71358625c1f3ebfb9bab49fba
Reviewed-on: https://chromium-review.googlesource.com/703690
Commit-Queue: Tibor Goldschwendt <tiborg@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarIan Vollick <vollick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509419}
parent 96787530
...@@ -715,7 +715,10 @@ group("gn_all") { ...@@ -715,7 +715,10 @@ group("gn_all") {
} }
if (enable_vr) { if (enable_vr) {
deps += [ "//chrome/browser/vr:vr_common_unittests" ] deps += [
"//chrome/browser/vr:vr_common_perftests",
"//chrome/browser/vr:vr_common_unittests",
]
if (is_linux && use_ozone) { if (is_linux && use_ozone) {
deps += [ "//chrome/browser/vr/testapp:vr_testapp" ] deps += [ "//chrome/browser/vr/testapp:vr_testapp" ]
} }
......
...@@ -209,11 +209,8 @@ test("vr_common_unittests") { ...@@ -209,11 +209,8 @@ test("vr_common_unittests") {
"service/vr_device_manager_unittest.cc", "service/vr_device_manager_unittest.cc",
"test/animation_utils.cc", "test/animation_utils.cc",
"test/animation_utils.h", "test/animation_utils.h",
"test/constants.h",
"test/fake_ui_element_renderer.cc", "test/fake_ui_element_renderer.cc",
"test/fake_ui_element_renderer.h", "test/fake_ui_element_renderer.h",
"test/gl_test_environment.cc",
"test/gl_test_environment.h",
"test/gl_test_environment_unittest.cc", "test/gl_test_environment_unittest.cc",
"test/mock_browser_interface.cc", "test/mock_browser_interface.cc",
"test/mock_browser_interface.h", "test/mock_browser_interface.h",
...@@ -239,41 +236,70 @@ test("vr_common_unittests") { ...@@ -239,41 +236,70 @@ test("vr_common_unittests") {
defines = [ "DEVICE_VR_IMPLEMENTATION" ] defines = [ "DEVICE_VR_IMPLEMENTATION" ]
deps = [ deps = [
":vr_common", ":vr_test_support",
":vr_test_pak",
"//base/test:test_support",
"//cc:test_support", "//cc:test_support",
"//components/security_state/core",
"//components/toolbar:vector_icons",
# TODO(mthiesse, crbug.com/769373): Remove dependency on device/vr:fakes.
"//device/vr:fakes",
"//mojo/common", "//mojo/common",
"//mojo/edk/system",
"//mojo/public/cpp/bindings", "//mojo/public/cpp/bindings",
"//skia",
"//testing/gmock", "//testing/gmock",
"//testing/gtest",
# TODO(mthiesse): Figure out why these webrtc deps are necessary for compiling these tests. # TODO(mthiesse): Figure out why these webrtc deps are necessary for compiling these tests.
# Is a dependency missing from some other target? # Is a dependency missing from some other target?
"//third_party/webrtc/api:video_frame_api", "//third_party/webrtc/api:video_frame_api",
"//third_party/webrtc/system_wrappers:metrics_default", "//third_party/webrtc/system_wrappers:metrics_default",
"//ui/accessibility:ax_gen",
"//ui/gfx:test_support", "//ui/gfx:test_support",
"//ui/gfx/geometry", "//ui/gfx/geometry",
"//ui/gl", "//ui/gl",
"//ui/gl:test_support",
] ]
if (is_win) { if (is_android) {
deps -= [ ":vr_common" ] deps += [ "//ui/android:ui_java" ]
deps += [ ":vr_common_source" ]
} }
}
test("vr_common_perftests") {
sources = [
"test/run_all_unittests.cc",
"text_perftest.cc",
]
deps = [
":vr_test_support",
"//testing/perf",
]
if (is_android) { if (is_android) {
deps += [ "//ui/android:ui_java" ] deps += [ "//ui/android:ui_java" ]
} }
}
source_set("vr_test_support") {
testonly = true
sources = [
"test/constants.h",
"test/gl_test_environment.cc",
"test/gl_test_environment.h",
]
public_deps = [
":vr_common",
":vr_test_pak",
"//base/test:test_support",
"//components/security_state/core",
"//components/toolbar:vector_icons",
"//mojo/edk/system",
"//skia",
"//testing/gtest",
"//ui/accessibility:ax_gen",
"//ui/gl:test_support",
# TODO(mthiesse, crbug.com/769373): Remove dependency on device/vr:fakes.
"//device/vr:fakes",
]
if (is_win) {
public_deps -= [ ":vr_common" ]
public_deps += [ ":vr_common_source" ]
}
data = [ data = [
"test/data/", "test/data/",
......
...@@ -17,10 +17,17 @@ namespace vr { ...@@ -17,10 +17,17 @@ namespace vr {
class TextTexture : public UiTexture { class TextTexture : public UiTexture {
public: public:
TextTexture(const base::string16& text, float font_height, float text_width) TextTexture(float font_height, float text_width)
: text_(text), font_height_(font_height), text_width_(text_width) {} : font_height_(font_height), text_width_(text_width) {}
~TextTexture() override {} ~TextTexture() override {}
void SetText(const base::string16& text) {
if (text_ == text)
return;
text_ = text;
set_dirty();
}
void SetColor(SkColor color) { void SetColor(SkColor color) {
if (color_ == color) if (color_ == color)
return; return;
...@@ -50,22 +57,24 @@ class TextTexture : public UiTexture { ...@@ -50,22 +57,24 @@ class TextTexture : public UiTexture {
Text::Text(int maximum_width_pixels, Text::Text(int maximum_width_pixels,
float font_height_meters, float font_height_meters,
float text_width_meters, float text_width_meters)
const base::string16& text)
: TexturedElement(maximum_width_pixels), : TexturedElement(maximum_width_pixels),
texture_(base::MakeUnique<TextTexture>(text, texture_(base::MakeUnique<TextTexture>(font_height_meters,
font_height_meters,
text_width_meters)) {} text_width_meters)) {}
Text::~Text() {} Text::~Text() {}
UiTexture* Text::GetTexture() const { void Text::SetText(const base::string16& text) {
return texture_.get(); texture_->SetText(text);
} }
void Text::SetColor(SkColor color) { void Text::SetColor(SkColor color) {
texture_->SetColor(color); texture_->SetColor(color);
} }
UiTexture* Text::GetTexture() const {
return texture_.get();
}
void TextTexture::Draw(SkCanvas* sk_canvas, const gfx::Size& texture_size) { void TextTexture::Draw(SkCanvas* sk_canvas, const gfx::Size& texture_size) {
cc::SkiaPaintCanvas paint_canvas(sk_canvas); cc::SkiaPaintCanvas paint_canvas(sk_canvas);
gfx::Canvas gfx_canvas(&paint_canvas, 1.0f); gfx::Canvas gfx_canvas(&paint_canvas, 1.0f);
......
...@@ -19,10 +19,10 @@ class Text : public TexturedElement { ...@@ -19,10 +19,10 @@ class Text : public TexturedElement {
public: public:
Text(int maximum_width_pixels, Text(int maximum_width_pixels,
float font_height_meters, float font_height_meters,
float text_width_meters, float text_width_meters);
const base::string16& text);
~Text() override; ~Text() override;
void SetText(const base::string16& text);
void SetColor(SkColor color); void SetColor(SkColor color);
private: private:
......
...@@ -5,33 +5,52 @@ ...@@ -5,33 +5,52 @@
#ifndef CHROME_BROWSER_VR_TEST_CONSTANTS_H_ #ifndef CHROME_BROWSER_VR_TEST_CONSTANTS_H_
#define CHROME_BROWSER_VR_TEST_CONSTANTS_H_ #define CHROME_BROWSER_VR_TEST_CONSTANTS_H_
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/geometry/vector3d_f.h" #include "ui/gfx/geometry/vector3d_f.h"
#include "ui/gfx/transform.h" #include "ui/gfx/transform.h"
namespace vr { namespace vr {
// Proj matrix as used on a Pixel phone. // Proj matrix as used on a Pixel phone with the Daydream headset.
static const gfx::Transform kProjMatrix(1.03317f, static const gfx::Transform kPixelDaydreamProjMatrix(1.03317f,
0.0f, 0.0f,
0.271253f, 0.271253f,
0.0f, 0.0f,
0.0f, 0.0f,
0.862458f, 0.862458f,
-0.0314586f, -0.0314586f,
0.0f, 0.0f,
0.0f, 0.0f,
0.0f, 0.0f,
-1.002f, -1.002f,
-0.2002f, -0.2002f,
0.0f, 0.0f,
0.0f, 0.0f,
-1.0f, -1.0f,
0.0f); 0.0f);
static const gfx::Vector3dF kForwardVector(0.0f, 0.0f, -1.0f); static const gfx::Vector3dF kForwardVector(0.0f, 0.0f, -1.0f);
constexpr float kEpsilon = 1e-5f; constexpr float kEpsilon = 1e-5f;
// Resolution of Pixel Phone for one eye.
static const gfx::Size kPixelHalfScreen(960, 1080);
static const char* kLoremIpsum100Chars =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis erat nisl, "
"tempus nec neque at nullam.";
static const char* kLoremIpsum700Chars =
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo "
"ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis "
"dis parturient montes, nascetur ridiculus mus. Donec quam felis, "
"ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa "
"quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, "
"arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. "
"Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras "
"dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. "
"Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. "
"Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus";
} // namespace vr } // namespace vr
#endif // CHROME_BROWSER_VR_TEST_CONSTANTS_H_ #endif // CHROME_BROWSER_VR_TEST_CONSTANTS_H_
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/vr/browser_ui_interface.h" #include "chrome/browser/vr/browser_ui_interface.h"
#include "chrome/browser/vr/test/constants.h"
#include "chrome/browser/vr/ui_browser_interface.h" #include "chrome/browser/vr/ui_browser_interface.h"
#include "chrome/browser/vr/ui_input_manager.h" #include "chrome/browser/vr/ui_input_manager.h"
#include "chrome/browser/vr/ui_renderer.h" #include "chrome/browser/vr/ui_renderer.h"
...@@ -20,13 +21,6 @@ ...@@ -20,13 +21,6 @@
namespace vr { namespace vr {
namespace {
// Resolution of Pixel Phone for one eye.
static const gfx::Size kPixelHalfScreen(960, 1080);
} // namespace
UiPixelTest::UiPixelTest() : frame_buffer_size_(kPixelHalfScreen) {} UiPixelTest::UiPixelTest() : frame_buffer_size_(kPixelHalfScreen) {}
UiPixelTest::~UiPixelTest() = default; UiPixelTest::~UiPixelTest() = default;
......
...@@ -140,7 +140,7 @@ void UiSceneManagerTest::CheckRendererOpacityRecursive( ...@@ -140,7 +140,7 @@ void UiSceneManagerTest::CheckRendererOpacityRecursive(
FakeUiElementRenderer renderer; FakeUiElementRenderer renderer;
if (element->draw_phase() != kPhaseNone) { if (element->draw_phase() != kPhaseNone) {
element->Render(&renderer, kProjMatrix); element->Render(&renderer, kPixelDaydreamProjMatrix);
} }
// It is expected that some elements doesn't render anything (such as root // It is expected that some elements doesn't render anything (such as root
......
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
import("//tools/grit/repack.gni")
executable("vr_testapp") { executable("vr_testapp") {
testonly = true testonly = true
...@@ -16,27 +14,14 @@ executable("vr_testapp") { ...@@ -16,27 +14,14 @@ executable("vr_testapp") {
] ]
deps = [ deps = [
"//base",
"//build/config:exe_and_shlib_deps", "//build/config:exe_and_shlib_deps",
"//chrome/browser/resources:vr_shell_resources", "//chrome/browser/vr:vr_test_support",
"//chrome/browser/vr:vr_common",
"//chrome/browser/vr:vr_test_pak",
"//components:components_tests_pak", "//components:components_tests_pak",
"//components/security_state/core",
"//components/toolbar:vector_icons",
"//components/tracing:startup_tracing", "//components/tracing:startup_tracing",
# TODO(mthiesse, crbug.com/769373): Remove dependency on device/vr:fakes.
"//device/vr:fakes",
"//skia",
"//ui/accessibility:ax_gen",
"//ui/display/types", "//ui/display/types",
"//ui/events", "//ui/events",
"//ui/events:dom_keycode_converter", "//ui/events:dom_keycode_converter",
"//ui/events/ozone:events_ozone_layout", "//ui/events/ozone:events_ozone_layout",
"//ui/gfx/geometry",
"//ui/gl",
"//ui/gl/init",
"//ui/ozone", "//ui/ozone",
"//ui/platform_window", "//ui/platform_window",
] ]
......
// 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 "base/memory/ptr_util.h"
#include "base/strings/utf_string_conversions.h"
#include "cc/base/lap_timer.h"
#include "chrome/browser/vr/elements/text.h"
#include "chrome/browser/vr/test/constants.h"
#include "chrome/browser/vr/test/gl_test_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/perf/perf_test.h"
namespace vr {
namespace {
constexpr int kMaximumTextWidthPixels = 512;
constexpr size_t kNumberOfRuns = 35;
constexpr float kFontHeightMeters = 0.05f;
constexpr float kTextWidthMeters = 1.0f;
} // namespace
class TextPerfTest : public testing::Test {
public:
void SetUp() override {
gl_test_environment_ =
base::MakeUnique<GlTestEnvironment>(kPixelHalfScreen);
text_element_ = base::MakeUnique<Text>(kMaximumTextWidthPixels,
kFontHeightMeters, kTextWidthMeters);
text_element_->Initialize();
}
void TearDown() override {
text_element_.reset();
gl_test_environment_.reset();
}
protected:
void PrintResults(const std::string& name) {
perf_test::PrintResult(name, "", "render_time_avg", timer_.MsPerLap(), "ms",
true);
perf_test::PrintResult(name, "", "number_of_runs",
static_cast<size_t>(timer_.NumLaps()), "runs", true);
}
void RenderAndLapTimer() {
static_cast<UiElement*>(text_element_.get())->PrepareToDraw();
// Make sure all GL commands are applied before we measure the time.
glFinish();
timer_.NextLap();
}
std::unique_ptr<Text> text_element_;
cc::LapTimer timer_;
private:
std::unique_ptr<GlTestEnvironment> gl_test_environment_;
};
TEST_F(TextPerfTest, RenderLoremIpsum100Chars) {
base::string16 text = base::UTF8ToUTF16(kLoremIpsum100Chars);
timer_.Reset();
for (size_t i = 0; i < kNumberOfRuns; i++) {
text[0] = 'a' + (i % 26);
text_element_->SetText(text);
RenderAndLapTimer();
}
PrintResults("render_lorem_ipsum_100_chars");
}
TEST_F(TextPerfTest, RenderLoremIpsum700Chars) {
base::string16 text = base::UTF8ToUTF16(kLoremIpsum700Chars);
timer_.Reset();
for (size_t i = 0; i < kNumberOfRuns; i++) {
text[0] = 'a' + (i % 26);
text_element_->SetText(text);
RenderAndLapTimer();
}
PrintResults("render_lorem_ipsum_700_chars");
}
} // namespace vr
...@@ -40,7 +40,7 @@ TEST_F(UiPixelTest, MAYBE(DrawVrBrowsingMode)) { ...@@ -40,7 +40,7 @@ TEST_F(UiPixelTest, MAYBE(DrawVrBrowsingMode)) {
// Draw UI. // Draw UI.
DrawUi(gfx::Vector3dF(0.0f, 0.0f, -1.0f), gfx::Point3F(0.5f, -0.5f, 0.0f), DrawUi(gfx::Vector3dF(0.0f, 0.0f, -1.0f), gfx::Point3F(0.5f, -0.5f, 0.0f),
UiInputManager::ButtonState::UP, 1.0f, kIdentity, kIdentity, UiInputManager::ButtonState::UP, 1.0f, kIdentity, kIdentity,
kProjMatrix); kPixelDaydreamProjMatrix);
// Read pixels into SkBitmap. // Read pixels into SkBitmap.
auto bitmap = SaveCurrentFrameBufferToSkBitmap(); auto bitmap = SaveCurrentFrameBufferToSkBitmap();
......
...@@ -279,10 +279,10 @@ void UiSceneManager::CreateSplashScreen() { ...@@ -279,10 +279,10 @@ void UiSceneManager::CreateSplashScreen() {
std::move(transient_parent)); std::move(transient_parent));
// Add "Powered by Chrome" text. // Add "Powered by Chrome" text.
auto text = base::MakeUnique<Text>( auto text = base::MakeUnique<Text>(512, kSplashScreenTextFontHeightM,
512, kSplashScreenTextFontHeightM, kSplashScreenTextWidthM, kSplashScreenTextWidthM);
l10n_util::GetStringUTF16(IDS_VR_POWERED_BY_CHROME_MESSAGE));
BindColor(this, text.get(), &ColorScheme::splash_screen_text_color); BindColor(this, text.get(), &ColorScheme::splash_screen_text_color);
text->SetText(l10n_util::GetStringUTF16(IDS_VR_POWERED_BY_CHROME_MESSAGE));
text->set_name(kSplashScreenText); text->set_name(kSplashScreenText);
text->SetVisible(true); text->SetVisible(true);
text->set_draw_phase(kPhaseOverlayForeground); text->set_draw_phase(kPhaseOverlayForeground);
...@@ -304,10 +304,10 @@ void UiSceneManager::CreateSplashScreen() { ...@@ -304,10 +304,10 @@ void UiSceneManager::CreateSplashScreen() {
} }
void UiSceneManager::CreateUnderDevelopmentNotice() { void UiSceneManager::CreateUnderDevelopmentNotice() {
auto text = base::MakeUnique<Text>( auto text = base::MakeUnique<Text>(512, kUnderDevelopmentNoticeFontHeightM,
512, kUnderDevelopmentNoticeFontHeightM, kUnderDevelopmentNoticeWidthM, kUnderDevelopmentNoticeWidthM);
l10n_util::GetStringUTF16(IDS_VR_UNDER_DEVELOPMENT_NOTICE));
BindColor(this, text.get(), &ColorScheme::world_background_text); BindColor(this, text.get(), &ColorScheme::world_background_text);
text->SetText(l10n_util::GetStringUTF16(IDS_VR_UNDER_DEVELOPMENT_NOTICE));
text->set_name(kUnderDevelopmentNotice); text->set_name(kUnderDevelopmentNotice);
text->set_draw_phase(kPhaseForeground); text->set_draw_phase(kPhaseForeground);
text->set_hit_testable(false); text->set_hit_testable(false);
......
...@@ -498,14 +498,14 @@ TEST_F(UiSceneManagerTest, PropagateContentBoundsOnStart) { ...@@ -498,14 +498,14 @@ TEST_F(UiSceneManagerTest, PropagateContentBoundsOnStart) {
OnContentScreenBoundsChanged( OnContentScreenBoundsChanged(
SizeFsAreApproximatelyEqual(expected_bounds, kTolerance))); SizeFsAreApproximatelyEqual(expected_bounds, kTolerance)));
manager_->OnProjMatrixChanged(kProjMatrix); manager_->OnProjMatrixChanged(kPixelDaydreamProjMatrix);
} }
TEST_F(UiSceneManagerTest, PropagateContentBoundsOnFullscreen) { TEST_F(UiSceneManagerTest, PropagateContentBoundsOnFullscreen) {
MakeManager(kNotInCct, kNotInWebVr); MakeManager(kNotInCct, kNotInWebVr);
AnimateBy(MsToDelta(0)); AnimateBy(MsToDelta(0));
manager_->OnProjMatrixChanged(kProjMatrix); manager_->OnProjMatrixChanged(kPixelDaydreamProjMatrix);
manager_->SetFullscreen(true); manager_->SetFullscreen(true);
AnimateBy(MsToDelta(0)); AnimateBy(MsToDelta(0));
...@@ -514,7 +514,7 @@ TEST_F(UiSceneManagerTest, PropagateContentBoundsOnFullscreen) { ...@@ -514,7 +514,7 @@ TEST_F(UiSceneManagerTest, PropagateContentBoundsOnFullscreen) {
OnContentScreenBoundsChanged( OnContentScreenBoundsChanged(
SizeFsAreApproximatelyEqual(expected_bounds, kTolerance))); SizeFsAreApproximatelyEqual(expected_bounds, kTolerance)));
manager_->OnProjMatrixChanged(kProjMatrix); manager_->OnProjMatrixChanged(kPixelDaydreamProjMatrix);
} }
TEST_F(UiSceneManagerTest, HitTestableElements) { TEST_F(UiSceneManagerTest, HitTestableElements) {
...@@ -527,7 +527,7 @@ TEST_F(UiSceneManagerTest, DontPropagateContentBoundsOnNegligibleChange) { ...@@ -527,7 +527,7 @@ TEST_F(UiSceneManagerTest, DontPropagateContentBoundsOnNegligibleChange) {
MakeManager(kNotInCct, kNotInWebVr); MakeManager(kNotInCct, kNotInWebVr);
AnimateBy(MsToDelta(0)); AnimateBy(MsToDelta(0));
manager_->OnProjMatrixChanged(kProjMatrix); manager_->OnProjMatrixChanged(kPixelDaydreamProjMatrix);
UiElement* content_quad = scene_->GetUiElementByName(kContentQuad); UiElement* content_quad = scene_->GetUiElementByName(kContentQuad);
gfx::SizeF content_quad_size = content_quad->size(); gfx::SizeF content_quad_size = content_quad->size();
...@@ -537,7 +537,7 @@ TEST_F(UiSceneManagerTest, DontPropagateContentBoundsOnNegligibleChange) { ...@@ -537,7 +537,7 @@ TEST_F(UiSceneManagerTest, DontPropagateContentBoundsOnNegligibleChange) {
EXPECT_CALL(*browser_, OnContentScreenBoundsChanged(testing::_)).Times(0); EXPECT_CALL(*browser_, OnContentScreenBoundsChanged(testing::_)).Times(0);
manager_->OnProjMatrixChanged(kProjMatrix); manager_->OnProjMatrixChanged(kPixelDaydreamProjMatrix);
} }
TEST_F(UiSceneManagerTest, RendererUsesCorrectOpacity) { TEST_F(UiSceneManagerTest, RendererUsesCorrectOpacity) {
......
...@@ -16,7 +16,8 @@ TEST(VrGlUtilTest, CalculateScreenSize) { ...@@ -16,7 +16,8 @@ TEST(VrGlUtilTest, CalculateScreenSize) {
model_matrix.Translate3d(0.0f, -0.25f, -2.5f); model_matrix.Translate3d(0.0f, -0.25f, -2.5f);
gfx::SizeF size(2.4f, 1.6f); gfx::SizeF size(2.4f, 1.6f);
gfx::SizeF screen_size = CalculateScreenSize(kProjMatrix, model_matrix, size); gfx::SizeF screen_size =
CalculateScreenSize(kPixelDaydreamProjMatrix, model_matrix, size);
EXPECT_FLOAT_EQ(screen_size.width(), 0.49592164f); EXPECT_FLOAT_EQ(screen_size.width(), 0.49592164f);
EXPECT_FLOAT_EQ(screen_size.height(), 0.27598655f); EXPECT_FLOAT_EQ(screen_size.height(), 0.27598655f);
......
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