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

Side by Side Diff: chrome/browser/android/vr_shell/ui_scene_unittest.cc

Issue 2814443004: Refactor VR math off of GVR types, onto gfx types where possible. (Closed)
Patch Set: Fix tests Created 3 years, 8 months 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/vr_shell/ui_scene.h" 5 #include "chrome/browser/android/vr_shell/ui_scene.h"
6 6
7 #define _USE_MATH_DEFINES // For M_PI in MSVC. 7 #define _USE_MATH_DEFINES // For M_PI in MSVC.
8 #include <cmath> 8 #include <cmath>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "chrome/browser/android/vr_shell/animation.h" 14 #include "chrome/browser/android/vr_shell/animation.h"
15 #include "chrome/browser/android/vr_shell/easing.h" 15 #include "chrome/browser/android/vr_shell/easing.h"
16 #include "chrome/browser/android/vr_shell/ui_elements.h" 16 #include "chrome/browser/android/vr_shell/ui_elements.h"
17 #include "chrome/browser/android/vr_shell/vr_math.h" 17 #include "device/vr/vr_math.h"
18 #include "device/vr/vr_types.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 20
20 #define TOLERANCE 0.0001 21 #define TOLERANCE 0.0001
21 22
22 #define EXPECT_VEC3F_NEAR(a, b) \ 23 #define EXPECT_VEC3F_NEAR(a, b) \
23 EXPECT_NEAR(a.x, b.x, TOLERANCE); \ 24 EXPECT_NEAR(a.x(), b.x(), TOLERANCE); \
24 EXPECT_NEAR(a.y, b.y, TOLERANCE); \ 25 EXPECT_NEAR(a.y(), b.y(), TOLERANCE); \
25 EXPECT_NEAR(a.z, b.z, TOLERANCE); 26 EXPECT_NEAR(a.z(), b.z(), TOLERANCE);
26 27
27 namespace vr_shell { 28 namespace vr_shell {
28 29
29 namespace { 30 namespace {
30 31
31 base::TimeTicks usToTicks(uint64_t us) { 32 base::TimeTicks usToTicks(uint64_t us) {
32 return base::TimeTicks::FromInternalValue(us); 33 return base::TimeTicks::FromInternalValue(us);
33 } 34 }
34 35
35 base::TimeDelta usToDelta(uint64_t us) { 36 base::TimeDelta usToDelta(uint64_t us) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 element = base::MakeUnique<ContentRectangle>(); 126 element = base::MakeUnique<ContentRectangle>();
126 element->id = 1; 127 element->id = 1;
127 element->parent_id = 0; 128 element->parent_id = 0;
128 element->size = {1, 1, 1}; 129 element->size = {1, 1, 1};
129 element->scale = {2, 2, 1}; 130 element->scale = {2, 2, 1};
130 element->rotation = {0, 0, 1, M_PI / 2}; 131 element->rotation = {0, 0, 1, M_PI / 2};
131 element->translation = {3, 0, 0}; 132 element->translation = {3, 0, 0};
132 scene.AddUiElement(std::move(element)); 133 scene.AddUiElement(std::move(element));
133 const ContentRectangle* child = scene.GetUiElementById(1); 134 const ContentRectangle* child = scene.GetUiElementById(1);
134 135
135 const gvr::Vec3f origin({0, 0, 0}); 136 const gfx::Vector3dF origin(0, 0, 0);
136 const gvr::Vec3f point({1, 0, 0}); 137 const gfx::Vector3dF point(1, 0, 0);
137 138
138 scene.UpdateTransforms(usToTicks(0)); 139 scene.UpdateTransforms(usToTicks(0));
139 auto new_origin = MatrixVectorMul(child->TransformMatrix(), origin); 140 auto new_origin = vr::MatrixVectorMul(child->TransformMatrix(), origin);
140 auto new_point = MatrixVectorMul(child->TransformMatrix(), point); 141 auto new_point = vr::MatrixVectorMul(child->TransformMatrix(), point);
141 EXPECT_VEC3F_NEAR(gvr::Vec3f({6, 10, 0}), new_origin); 142 EXPECT_VEC3F_NEAR(gfx::Vector3dF(6, 10, 0), new_origin);
142 EXPECT_VEC3F_NEAR(gvr::Vec3f({0, 10, 0}), new_point); 143 EXPECT_VEC3F_NEAR(gfx::Vector3dF(0, 10, 0), new_point);
143 } 144 }
144 145
145 TEST(UiScene, Opacity) { 146 TEST(UiScene, Opacity) {
146 UiScene scene; 147 UiScene scene;
147 148
148 auto element = base::MakeUnique<ContentRectangle>(); 149 auto element = base::MakeUnique<ContentRectangle>();
149 element->id = 0; 150 element->id = 0;
150 element->opacity = 0.5; 151 element->opacity = 0.5;
151 scene.AddUiElement(std::move(element)); 152 scene.AddUiElement(std::move(element));
152 153
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 // Add a child to the parent, with anchoring. 203 // Add a child to the parent, with anchoring.
203 element = base::MakeUnique<ContentRectangle>(); 204 element = base::MakeUnique<ContentRectangle>();
204 element->id = 1; 205 element->id = 1;
205 element->parent_id = 0; 206 element->parent_id = 0;
206 element->x_anchoring = GetParam().x_anchoring; 207 element->x_anchoring = GetParam().x_anchoring;
207 element->y_anchoring = GetParam().y_anchoring; 208 element->y_anchoring = GetParam().y_anchoring;
208 scene.AddUiElement(std::move(element)); 209 scene.AddUiElement(std::move(element));
209 210
210 scene.UpdateTransforms(usToTicks(0)); 211 scene.UpdateTransforms(usToTicks(0));
211 const ContentRectangle* child = scene.GetUiElementById(1); 212 const ContentRectangle* child = scene.GetUiElementById(1);
212 EXPECT_NEAR(child->GetCenter().x, GetParam().expected_x, TOLERANCE); 213 EXPECT_NEAR(child->GetCenter().x(), GetParam().expected_x, TOLERANCE);
213 EXPECT_NEAR(child->GetCenter().y, GetParam().expected_y, TOLERANCE); 214 EXPECT_NEAR(child->GetCenter().y(), GetParam().expected_y, TOLERANCE);
214 scene.RemoveUiElement(1); 215 scene.RemoveUiElement(1);
215 } 216 }
216 217
217 const std::vector<AnchoringTestCase> anchoring_test_cases = { 218 const std::vector<AnchoringTestCase> anchoring_test_cases = {
218 {XAnchoring::XNONE, YAnchoring::YNONE, 0, 0}, 219 {XAnchoring::XNONE, YAnchoring::YNONE, 0, 0},
219 {XAnchoring::XLEFT, YAnchoring::YNONE, -2, 0}, 220 {XAnchoring::XLEFT, YAnchoring::YNONE, -2, 0},
220 {XAnchoring::XRIGHT, YAnchoring::YNONE, 2, 0}, 221 {XAnchoring::XRIGHT, YAnchoring::YNONE, 2, 0},
221 {XAnchoring::XNONE, YAnchoring::YTOP, 0, 2}, 222 {XAnchoring::XNONE, YAnchoring::YTOP, 0, 2},
222 {XAnchoring::XNONE, YAnchoring::YBOTTOM, 0, -2}, 223 {XAnchoring::XNONE, YAnchoring::YBOTTOM, 0, -2},
223 {XAnchoring::XLEFT, YAnchoring::YTOP, -2, 2}, 224 {XAnchoring::XLEFT, YAnchoring::YTOP, -2, 2},
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 EXPECT_EQ(element->id, 10); 272 EXPECT_EQ(element->id, 10);
272 EXPECT_EQ(element->name, "abc"); 273 EXPECT_EQ(element->name, "abc");
273 EXPECT_EQ(element->parent_id, 11); 274 EXPECT_EQ(element->parent_id, 11);
274 EXPECT_EQ(element->visible, false); 275 EXPECT_EQ(element->visible, false);
275 EXPECT_EQ(element->hit_testable, false); 276 EXPECT_EQ(element->hit_testable, false);
276 EXPECT_EQ(element->fill, Fill::SPRITE); 277 EXPECT_EQ(element->fill, Fill::SPRITE);
277 EXPECT_EQ(element->x_anchoring, XAnchoring::XLEFT); 278 EXPECT_EQ(element->x_anchoring, XAnchoring::XLEFT);
278 EXPECT_EQ(element->y_anchoring, YAnchoring::YTOP); 279 EXPECT_EQ(element->y_anchoring, YAnchoring::YTOP);
279 EXPECT_FLOAT_EQ(element->opacity, 0.357); 280 EXPECT_FLOAT_EQ(element->opacity, 0.357);
280 281
281 EXPECT_EQ(element->copy_rect.x, 100); 282 EXPECT_EQ(element->copy_rect.x(), 100);
282 EXPECT_EQ(element->copy_rect.y, 101); 283 EXPECT_EQ(element->copy_rect.y(), 101);
283 EXPECT_EQ(element->copy_rect.width, 102); 284 EXPECT_EQ(element->copy_rect.width(), 102);
284 EXPECT_EQ(element->copy_rect.height, 103); 285 EXPECT_EQ(element->copy_rect.height(), 103);
285 286
286 EXPECT_FLOAT_EQ(element->size.x, 200); 287 EXPECT_FLOAT_EQ(element->size.x(), 200);
287 EXPECT_FLOAT_EQ(element->size.y, 201); 288 EXPECT_FLOAT_EQ(element->size.y(), 201);
288 EXPECT_FLOAT_EQ(element->size.z, 1); 289 EXPECT_FLOAT_EQ(element->size.z(), 1);
289 290
290 EXPECT_FLOAT_EQ(element->scale.x, 300); 291 EXPECT_FLOAT_EQ(element->scale.x(), 300);
291 EXPECT_FLOAT_EQ(element->scale.y, 301); 292 EXPECT_FLOAT_EQ(element->scale.y(), 301);
292 EXPECT_FLOAT_EQ(element->scale.z, 302); 293 EXPECT_FLOAT_EQ(element->scale.z(), 302);
293 294
294 EXPECT_FLOAT_EQ(element->rotation.x, 400); 295 EXPECT_FLOAT_EQ(element->rotation.x, 400);
295 EXPECT_FLOAT_EQ(element->rotation.y, 401); 296 EXPECT_FLOAT_EQ(element->rotation.y, 401);
296 EXPECT_FLOAT_EQ(element->rotation.z, 402); 297 EXPECT_FLOAT_EQ(element->rotation.z, 402);
297 EXPECT_FLOAT_EQ(element->rotation.angle, 403); 298 EXPECT_FLOAT_EQ(element->rotation.angle, 403);
298 299
299 EXPECT_FLOAT_EQ(element->translation.x, 500); 300 EXPECT_FLOAT_EQ(element->translation.x(), 500);
300 EXPECT_FLOAT_EQ(element->translation.y, 501); 301 EXPECT_FLOAT_EQ(element->translation.y(), 501);
301 EXPECT_FLOAT_EQ(element->translation.z, 502); 302 EXPECT_FLOAT_EQ(element->translation.z(), 502);
302 303
303 dict.Clear(); 304 dict.Clear();
304 dict.SetInteger("id", 12); 305 dict.SetInteger("id", 12);
305 dict.SetBoolean("lockToFov", true); 306 dict.SetBoolean("lockToFov", true);
306 307
307 scene.AddUiElementFromDict(dict); 308 scene.AddUiElementFromDict(dict);
308 element = scene.GetUiElementById(12); 309 element = scene.GetUiElementById(12);
309 EXPECT_NE(element, nullptr); 310 EXPECT_NE(element, nullptr);
310 311
311 EXPECT_EQ(element->id, 12); 312 EXPECT_EQ(element->id, 12);
(...skipping 21 matching lines...) Expand all
333 center_color.SetDouble("b", 0.7); 334 center_color.SetDouble("b", 0.7);
334 center_color.SetDouble("a", 0.8); 335 center_color.SetDouble("a", 0.8);
335 336
336 // Test SPRITE filling. 337 // Test SPRITE filling.
337 dict.SetInteger("id", 9); 338 dict.SetInteger("id", 9);
338 dict.SetInteger("fillType", Fill::SPRITE); 339 dict.SetInteger("fillType", Fill::SPRITE);
339 scene.AddUiElementFromDict(dict); 340 scene.AddUiElementFromDict(dict);
340 const auto* element = scene.GetUiElementById(9); 341 const auto* element = scene.GetUiElementById(9);
341 342
342 EXPECT_EQ(element->fill, Fill::SPRITE); 343 EXPECT_EQ(element->fill, Fill::SPRITE);
343 EXPECT_EQ(element->copy_rect.x, 1); 344 EXPECT_EQ(element->copy_rect.x(), 1);
344 EXPECT_EQ(element->copy_rect.y, 2); 345 EXPECT_EQ(element->copy_rect.y(), 2);
345 EXPECT_EQ(element->copy_rect.width, 3); 346 EXPECT_EQ(element->copy_rect.width(), 3);
346 EXPECT_EQ(element->copy_rect.height, 4); 347 EXPECT_EQ(element->copy_rect.height(), 4);
347 348
348 // Test OPAQUE_GRADIENT filling. 349 // Test OPAQUE_GRADIENT filling.
349 dict.Clear(); 350 dict.Clear();
350 dict.SetInteger("id", 10); 351 dict.SetInteger("id", 10);
351 dict.SetInteger("fillType", Fill::OPAQUE_GRADIENT); 352 dict.SetInteger("fillType", Fill::OPAQUE_GRADIENT);
352 dict.Set("edgeColor", edge_color.DeepCopy()); 353 dict.Set("edgeColor", edge_color.DeepCopy());
353 dict.Set("centerColor", center_color.DeepCopy()); 354 dict.Set("centerColor", center_color.DeepCopy());
354 scene.AddUiElementFromDict(dict); 355 scene.AddUiElementFromDict(dict);
355 element = scene.GetUiElementById(10); 356 element = scene.GetUiElementById(10);
356 357
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 EXPECT_FLOAT_EQ(300, animation->from[0]); 445 EXPECT_FLOAT_EQ(300, animation->from[0]);
445 EXPECT_FLOAT_EQ(301, animation->from[1]); 446 EXPECT_FLOAT_EQ(301, animation->from[1]);
446 EXPECT_FLOAT_EQ(302, animation->from[2]); 447 EXPECT_FLOAT_EQ(302, animation->from[2]);
447 EXPECT_FLOAT_EQ(303, animation->from[3]); 448 EXPECT_FLOAT_EQ(303, animation->from[3]);
448 449
449 EXPECT_EQ(usToTicks(22345000), animation->start); 450 EXPECT_EQ(usToTicks(22345000), animation->start);
450 EXPECT_EQ(usToDelta(54321000), animation->duration); 451 EXPECT_EQ(usToDelta(54321000), animation->duration);
451 } 452 }
452 453
453 } // namespace vr_shell 454 } // namespace vr_shell
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/ui_scene.cc ('k') | chrome/browser/android/vr_shell/vr_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698