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

Side by Side Diff: remoting/webapp/unittests/client_session_unittest.js

Issue 804783002: Improve DPI matching & scaling logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix multi-monitor specialization & update tests Created 5 years, 10 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
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 (function() {
6
7 'use strict';
8
9 module('client_session');
10
11 function size(width, height) {
12 return {width: width, height: height};
13 }
14
15 function dpi(x, y) {
16 return {x: x, y: y};
17 }
18
19 test('choosePluginSize() handles same-DPI client & host',
Jamie 2015/02/09 23:52:35 s/same/low/? (since you have a test for both being
Wez 2015/02/13 18:59:08 Done.
20 function() {
21 // 1. Client & host size the same.
22 var pluginSize = remoting.ClientSession.choosePluginSize(
23 size(640, 480), 1.0, size(640, 480), dpi(96, 96), 1.0, false, true);
24 QUnit.deepEqual(pluginSize, size(640, 480));
25
26 // 2. Client logical dimensions smaller than host's.
27 pluginSize = remoting.ClientSession.choosePluginSize(
28 size(640, 480), 1.0, size(1024, 600), dpi(96, 96), 1.0, false, true);
29 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600));
30
31 // 3. Client Y dimension larger than hosts, X dimension smaller.
32 pluginSize = remoting.ClientSession.choosePluginSize(
33 size(640, 640), 1.0, size(1024, 600), dpi(96, 96), 1.0, false, true);
34 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600));
35
36 // 4. Client dimensions larger than host's by <2x.
37 pluginSize = remoting.ClientSession.choosePluginSize(
38 size(1280, 900), 1.0, size(640, 480), dpi(96, 96), 1.0, false, true);
39 QUnit.deepEqual(pluginSize, size(640, 480));
40
41 // 5. Client dimensions larger than host's by >2x.
42 pluginSize = remoting.ClientSession.choosePluginSize(
43 size(1280, 1024), 1.0, size(640, 480), dpi(96, 96), 1.0, false, true);
44 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480));
Jamie 2015/02/09 23:52:35 I realize it's mathematically the same, but if you
Wez 2015/02/13 18:59:08 Done.
45 });
46
47 test('choosePluginSize() handles high-DPI client, low-DPI host',
48 function() {
49 // 1. Client & host size the same.
50 var pluginSize = remoting.ClientSession.choosePluginSize(
51 size(640, 480), 2.0, size(640, 480), dpi(96, 96), 1.0, false, true);
52 QUnit.deepEqual(pluginSize, size(640, 480));
53
54 // 2. Client logical dimensions smaller than host's.
55 pluginSize = remoting.ClientSession.choosePluginSize(
56 size(640, 480), 2.0, size(1024, 600), dpi(96, 96), 1.0, false, true);
57 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600));
58
59 // 3. Client Y dimension larger than hosts, X dimension smaller.
60 pluginSize = remoting.ClientSession.choosePluginSize(
61 size(640, 640), 2.0, size(1024, 600), dpi(96, 96), 1.0, false, true);
62 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600));
63
64 // 4. Client logical dimensions larger than host's by <2x.
65 pluginSize = remoting.ClientSession.choosePluginSize(
66 size(1280, 900), 2.0, size(640, 480), dpi(96, 96), 1.0, false, true);
67 QUnit.deepEqual(pluginSize, size(640 * 3 / 2.0, 480 * 3 / 2.0));
Jamie 2015/02/09 23:52:35 I don't understand how 3/2 is relevant to these ca
Wez 2015/02/13 18:59:08 Done.
68
69 // 5. Client dimensions larger than host's by >2x.
70 pluginSize = remoting.ClientSession.choosePluginSize(
71 size(1280, 1024), 2.0, size(640, 480), dpi(96, 96), 1.0, false, true);
72 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480));
73 });
74
75 test('choosePluginSize() handles low-DPI client, high-DPI host',
76 function() {
77 // 1. Client & host size the same.
78 var pluginSize = remoting.ClientSession.choosePluginSize(
79 size(640, 480), 1.0, size(640, 480), dpi(192, 192), 1.0, false, true);
80 QUnit.deepEqual(pluginSize, size(640, 480));
81
82 // 2. Client logical dimensions smaller than host's.
83 pluginSize = remoting.ClientSession.choosePluginSize(
84 size(640, 480), 1.0, size(1024, 600), dpi(192, 192), 1.0, false, true);
85 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600));
86
87 // 3. Client Y dimension larger than hosts, X dimension smaller.
88 pluginSize = remoting.ClientSession.choosePluginSize(
89 size(640, 640), 1.0, size(1024, 600), dpi(192, 192), 1.0, false, true);
90 QUnit.deepEqual(pluginSize, size(640, (640 / 1024) * 600));
91
92 // 4. Client dimensions larger than host's by <2x.
93 pluginSize = remoting.ClientSession.choosePluginSize(
94 size(1280, 900), 1.0, size(640, 480), dpi(192, 192), 1.0, false, true);
95 QUnit.deepEqual(pluginSize, size(640, 480));
96
97 // 5. Client dimensions larger than host's by >2x.
98 pluginSize = remoting.ClientSession.choosePluginSize(
99 size(1280, 1024), 1.0, size(640, 480), dpi(192, 192), 1.0, false, true);
100 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480));
101 });
102
103 test('choosePluginSize() handles high-DPI client and host',
104 function() {
105 // 1. Client & host size the same.
106 var pluginSize = remoting.ClientSession.choosePluginSize(
107 size(640, 480), 2.0, size(640, 480), dpi(192, 192), 1.0, false, true);
108 QUnit.deepEqual(pluginSize, size(640, 480));
109
110 // 2. Client logical dimensions smaller than host's.
111 pluginSize = remoting.ClientSession.choosePluginSize(
112 size(640, 480), 2.0, size(1024, 600), dpi(192, 192), 1.0, false, true);
113 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 600 / 2.0));
114
115 // 3. Client Y dimension larger than hosts, X dimension smaller.
116 pluginSize = remoting.ClientSession.choosePluginSize(
117 size(640, 640), 2.0, size(1024, 600), dpi(192, 192), 1.0, false, true);
118 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 600 / 2.0));
119
120 // 4. Client logical dimensions larger than host's by <2x.
121 pluginSize = remoting.ClientSession.choosePluginSize(
122 size(1280, 900), 2.0, size(640, 480), dpi(192, 192), 1.0, false, true);
123 QUnit.deepEqual(pluginSize, size(640 * 3 / 2.0, 480 * 3 / 2.0));
124
125 // 5. Client dimensions larger than host's by >2x.
126 pluginSize = remoting.ClientSession.choosePluginSize(
127 size(1280, 1024), 2.0, size(640, 480), dpi(192, 192), 1.0, false, true);
128 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480));
129 });
130
131 test('choosePluginSize() handles high-DPI client, 150% DPI host',
132 function() {
133 // 1. Client & host size the same.
134 var pluginSize = remoting.ClientSession.choosePluginSize(
135 size(640, 480), 2.0, size(640, 480), dpi(144, 144), 1.0, false, true);
136 QUnit.deepEqual(pluginSize, size(640, 480));
137
138 // 2. Client dimensions smaller than host's.
139 pluginSize = remoting.ClientSession.choosePluginSize(
140 size(640, 480), 2.0, size(1024, 600), dpi(144, 144), 1.0, false, true);
141 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 600 / 2.0));
142
143 // 3. Client Y dimension larger than hosts, X dimension smaller.
144 pluginSize = remoting.ClientSession.choosePluginSize(
145 size(640, 640), 2.0, size(1024, 600), dpi(144, 144), 1.0, false, true);
146 QUnit.deepEqual(pluginSize, size(1024 / 2.0, 600 / 2.0));
147
148 // 4. Client dimensions larger than host's by <2x.
149 pluginSize = remoting.ClientSession.choosePluginSize(
150 size(1280, 900), 2.0, size(640, 480), dpi(144, 144), 1.0, false, true);
151 QUnit.deepEqual(pluginSize, size(640 * 3 / 2.0, 480 * 3 / 2.0));
152
153 // 5. Client dimensions larger than host's by >2x.
154 pluginSize = remoting.ClientSession.choosePluginSize(
155 size(1280, 1024), 2.0, size(640, 480), dpi(144, 144), 1.0, false, true);
156 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480));
157 });
158
159 test('choosePluginSize() handles high-DPI client, 125% DPI host',
160 function() {
161 // 1. Client & host size the same.
162 var pluginSize = remoting.ClientSession.choosePluginSize(
163 size(640, 480), 2.0, size(640, 480), dpi(120, 120), 1.0, false, true);
164 QUnit.deepEqual(pluginSize, size(640, 480));
165
166 // 2. Client dimensions smaller than host's.
167 pluginSize = remoting.ClientSession.choosePluginSize(
168 size(640, 480), 2.0, size(1024, 600), dpi(120, 120), 1.0, false, true);
169 QUnit.deepEqual(pluginSize, size(640, 600 * (640 / 1024)));
170
171 // 3. Client Y dimension larger than hosts, X dimension smaller.
172 pluginSize = remoting.ClientSession.choosePluginSize(
173 size(640, 640), 2.0, size(1024, 600), dpi(120, 120), 1.0, false, true);
174 QUnit.deepEqual(pluginSize, size(640, 600 * (640 / 1024)));
175
176 // 4. Client dimensions larger than host's by <2x.
177 pluginSize = remoting.ClientSession.choosePluginSize(
178 size(1280, 900), 2.0, size(640, 480), dpi(120, 120), 1.0, false, true);
179 QUnit.deepEqual(pluginSize, size(640 * 3 / 2.0, 480 * 3 / 2.0));
180
181 // 5. Client dimensions larger than host's by >2x.
182 pluginSize = remoting.ClientSession.choosePluginSize(
183 size(1280, 1024), 2.0, size(640, 480), dpi(120, 120), 1.0, false, true);
184 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480));
185 });
186
187 test('choosePluginSize() with shrink-to-fit disabled',
188 function() {
189 // 1. Client & host size the same.
190 var pluginSize = remoting.ClientSession.choosePluginSize(
191 size(640, 480), 1.0, size(640, 480), dpi(96, 96), 1.0, false, false);
192 QUnit.deepEqual(pluginSize, size(640, 480));
193
194 // 2. Client logical dimensions smaller than host's.
195 pluginSize = remoting.ClientSession.choosePluginSize(
196 size(640, 480), 1.0, size(1024, 600), dpi(96, 96), 1.0, false, false);
197 QUnit.deepEqual(pluginSize, size(1024, 600));
198
199 // 3. Client dimensions larger than host's by <2x.
200 pluginSize = remoting.ClientSession.choosePluginSize(
201 size(1280, 900), 1.0, size(640, 480), dpi(96, 96), 1.0, false, false);
202 QUnit.deepEqual(pluginSize, size(640, 480));
203
204 // 4. Client dimensions larger than host's by >2x.
205 pluginSize = remoting.ClientSession.choosePluginSize(
206 size(1280, 1024), 1.0, size(640, 480), dpi(96, 96), 1.0, false, false);
207 QUnit.deepEqual(pluginSize, size(1280, (1280 / 640) * 480));
208
209 // 5. Client smaller than host, client high-DPI, host low-DPI.
210 pluginSize = remoting.ClientSession.choosePluginSize(
211 size(640, 480), 2.0, size(1024, 600), dpi(96, 96), 1.0, false, false);
212 QUnit.deepEqual(pluginSize, size(1024, 600));
213
214 // 6. Client smaller than host, client low-DPI, host high-DPI.
215 pluginSize = remoting.ClientSession.choosePluginSize(
216 size(640, 480), 1.0, size(1024, 600), dpi(192, 192), 1.0, false, false);
217 QUnit.deepEqual(pluginSize, size(1024, 600));
218
219 // 7. Client smaller than host, both high-DPI.
220 pluginSize = remoting.ClientSession.choosePluginSize(
221 size(640, 480), 2.0, size(1024, 600), dpi(192, 192), 1.0, false, false);
222 QUnit.deepEqual(pluginSize, size(512, (512 / 1024) * 600));
223
224 // 8. Client smaller than host, client high-DPI, host 150% DPI.
225 pluginSize = remoting.ClientSession.choosePluginSize(
226 size(640, 480), 2.0, size(1024, 600), dpi(144, 144), 1.0, false, false);
227 QUnit.deepEqual(pluginSize, size(512, (512 / 1024) * 600));
228 });
229
230 test('choosePluginSize() full-screen multi-monitor optimization',
231 function() {
232 // Each test has a host sized to approximate two or more monitors.
233
234 // 1. Client & host per-monitor dimensions match, two monitors side-by-side.
235 var pluginSize = remoting.ClientSession.choosePluginSize(
236 size(640, 480), 1.0, size(2 * 640, 480), dpi(96, 96), 1.0, true, true);
237 QUnit.deepEqual(pluginSize, size(2 * 640, 480));
238
239 // 2. Client & host per-monitor dimensions match, two monitors stacked.
240 pluginSize = remoting.ClientSession.choosePluginSize(
241 size(640, 480), 1.0, size(640, 2 * 480), dpi(96, 96), 1.0, true, true);
242 QUnit.deepEqual(pluginSize, size(640, 2 * 480));
243
244 // 3. Client larger, two monitors stacked.
245 pluginSize = remoting.ClientSession.choosePluginSize(
246 size(1024, 768), 1.0, size(640, 2 * 480), dpi(96, 96), 1.0, true, true);
247 QUnit.deepEqual(pluginSize, size(640 * (768 / (2 * 480)), 768));
248
249 // 4. Client smaller, two monitors stacked.
250 pluginSize = remoting.ClientSession.choosePluginSize(
251 size(640, 480), 1.0, size(1024, 2 * 768), dpi(96, 96), 1.0, true, true);
252 QUnit.deepEqual(pluginSize, size(640, 2 * 768 * (640 / 1024)));
253
254 // 5. Client wide-screen, host two standard monitors stacked.
255 pluginSize = remoting.ClientSession.choosePluginSize(
256 size(1920, 1080), 1.0, size(1024, 2 * 768), dpi(96, 96), 1.0,
257 true, true);
258 QUnit.deepEqual(pluginSize, size(1024 * (1080 / (2 * 768)), 1080));
259
260 // 6. Client & host per-monitor dimensions match, two monitors stacked,
261 // high-DPI client.
262 pluginSize = remoting.ClientSession.choosePluginSize(
263 size(640, 480), 2.0, size(640, 2 * 480), dpi(96, 96), 1.0, true, true);
264 QUnit.deepEqual(pluginSize, size(640, 2 * 480));
265
266 // 7. Client & host per-monitor dimensions match, two monitors stacked,
267 // high-DPI host.
268 pluginSize = remoting.ClientSession.choosePluginSize(
269 size(640, 480), 1.0, size(640, 2 * 480), dpi(192, 192),
270 1.0, true, true);
271 QUnit.deepEqual(pluginSize, size(640, 2 * 480));
272
273 // 8. Client & host per-monitor dimensions match, two monitors stacked,
274 // high-DPI client & host.
275 pluginSize = remoting.ClientSession.choosePluginSize(
276 size(640, 480), 2.0, size(640, 2 * 480), dpi(192, 192),
277 1.0, true, true);
278 QUnit.deepEqual(pluginSize, size(640 / 2.0, (2 * 480) / 2.0));
279 });
280
281 })();
OLDNEW
« remoting/remoting_webapp_files.gypi ('K') | « remoting/webapp/crd/js/client_session.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698