1bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Copyright 2009 the V8 project authors. All rights reserved.
2bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Redistribution and use in source and binary forms, with or without
3bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// modification, are permitted provided that the following conditions are
4bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// met:
5bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
6bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//     * Redistributions of source code must retain the above copyright
7bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       notice, this list of conditions and the following disclaimer.
8bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//     * Redistributions in binary form must reproduce the above
9bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       copyright notice, this list of conditions and the following
10bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       disclaimer in the documentation and/or other materials provided
11bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       with the distribution.
12bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//     * Neither the name of Google Inc. nor the names of its
13bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       contributors may be used to endorse or promote products derived
14bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       from this software without specific prior written permission.
15bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
16bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
28bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Load implementations from <project root>/tools.
29bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Files: tools/csvparser.js tools/splaytree.js tools/codemap.js
30bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Files: tools/consarray.js tools/profile.js tools/profile_view.js
31bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Files: tools/logreader.js tools/tickprocessor.js
32bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Files: tools/profviz/composer.js
33bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Env: TEST_FILE_NAME
34bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
35bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('string', typeof TEST_FILE_NAME);
36bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar path_length = TEST_FILE_NAME.lastIndexOf('/');
37bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgif (path_length == -1) {
38bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  path_length = TEST_FILE_NAME.lastIndexOf('\\');
39bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org}
40bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(path_length != -1);
41bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
42bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar path = TEST_FILE_NAME.substr(0, path_length + 1);
43bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar input_file = path + "profviz-test.log";
44bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar reference_file = path + "profviz-test.default";
45bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
46bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar content_lines = read(input_file).split("\n");
47bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar line_cursor = 0;
48bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar output_lines = [];
49bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
50bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgfunction input() {
51bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  return content_lines[line_cursor++];
52bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org}
53bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
54bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgfunction output(line) {
55bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  output_lines.push(line);
56bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org}
57bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
58bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgfunction set_range(start, end) {
59bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  range_start = start;
60bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  range_end = end;
61bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org}
62bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
63bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar distortion = 4500 / 1000000;
64bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar resx = 1600;
65bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar resy = 600;
66bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
67bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar psc = new PlotScriptComposer(resx, resy);
68bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgpsc.collectData(input, distortion);
69bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgpsc.findPlotRange(undefined, undefined, set_range);
70bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar objects = psc.assembleOutput(output);
71bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
72bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgoutput("# start: " + range_start);
73bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgoutput("# end: " + range_end);
74bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgoutput("# objects: " + objects);
75bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
76bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar create_baseline = false;
77bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
78bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgif (create_baseline) {
79bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  print(JSON.stringify(output_lines, null, 2));
80bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org} else {
81bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  assertArrayEquals(output_lines,
82bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org                    JSON.parse(read(reference_file)));
83bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org}
84