xref: /trunk/test/testgui/source/pvt/gui/Benchmark.java (revision 57caf934cc4bd0c33eda07ea95aabaebabf812db)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 /**
23  *
24  */
25 
26 package pvt.gui;
27 
28 import static org.openoffice.test.common.Testspace.*;
29 import static org.openoffice.test.vcl.Tester.*;
30 import static testlib.gui.UIMap.*;
31 
32 import java.io.File;
33 import java.io.FileOutputStream;
34 import java.io.PrintStream;
35 import java.util.HashMap;
36 
37 import org.junit.AfterClass;
38 import org.junit.BeforeClass;
39 import org.junit.Rule;
40 import org.junit.Test;
41 import org.junit.rules.TestName;
42 import org.openoffice.test.OpenOffice;
43 import org.openoffice.test.common.Condition;
44 import org.openoffice.test.common.Logger;
45 import org.openoffice.test.common.SystemUtil;
46 import org.openoffice.test.common.Testspace;
47 
48 
49 public class Benchmark {
50     @Rule
51     public Logger log = Logger.getLogger(this);
52 
53     @Rule
54     public TestName testname = new TestName();
55 
56     private static PrintStream result;
57 
58     private static final double INTERVAL = 0.01;
59 
60     public Benchmark() {
61 
62     }
63 
64     @BeforeClass
65     public static void beforeClass() throws Exception {
66         File resultFile = Testspace.getFile("output/gui_benchmark.csv");
67         resultFile.getParentFile().mkdirs();
68         result = new PrintStream(new FileOutputStream(resultFile));
69         OpenOffice.killAll();
70 
71         result.println("Scenario,Consumed Time,Memory(VSZ),Memory(RSS),Handles(Windows Only)");
72     }
73 
74     @AfterClass
75     public static void afterClass() throws Exception {
76         result.close();
77         app.close();
78     }
79 
80     private HashMap<String, Object> getPerfData() {
81         HashMap<String, Object> proccessInfo = SystemUtil.findProcess(".*(soffice\\.bin|soffice\\.exe .*-env).*");
82         String pid = (String) proccessInfo.get("pid");
83         return SystemUtil.getProcessPerfData(pid);
84     }
85 
86     private void addRecord(int i, long start, long end) {
87         HashMap<String, Object>  perf = getPerfData();
88         result.println(testname.getMethodName() + i + "," + (end - start) + "," + perf.get("vsz") + "," + perf.get("rss") + "," + perf.get("handles"));
89     }
90 
91     @Test
92     public void coolStartup() throws Exception {
93         aoo.kill();
94         aoo.cleanUserInstallation();
95         aoo.start();
96         long start = System.currentTimeMillis();
97         startcenter.waitForExistence(120, INTERVAL);
98         long end = System.currentTimeMillis();
99         sleep(2);
100         addRecord(0, start, end);
101         app.close();
102     }
103 
104     @Test
105     public void warmStartup() throws Exception {
106         for (int i = 0; i < 8; i++) {
107             aoo.kill();//make sure app is closed
108             aoo.start();
109             long start = System.currentTimeMillis();
110             startcenter.waitForExistence(120, INTERVAL);
111             long end = System.currentTimeMillis();
112             sleep(2);
113             addRecord(i, start, end);
114             app.close();
115         }
116     }
117 
118     @Test
119     public void newTextDocument() {
120         for (int i = 0; i < 8; i++) {
121             aoo.kill();//make sure app is closed
122             aoo.start();
123             startCenterWriterButton.waitForExistence(120, 1);
124             sleep(2);
125             startCenterWriterButton.click(0.5, 0.5);
126             long start = System.currentTimeMillis();
127             writer.waitForExistence(60, INTERVAL);
128             long end = System.currentTimeMillis();
129             sleep(2);
130             addRecord(i, start, end);
131             app.close();
132         }
133     }
134 
135     @Test
136     public void newSpreadsheet() {
137         for (int i = 0; i < 8; i++) {
138             aoo.kill();//make sure app is closed
139             aoo.start();
140             startCenterCalcButton.waitForExistence(120, 1);
141             sleep(2);
142             startCenterCalcButton.click(0.5, 0.5);
143             long start = System.currentTimeMillis();
144             calc.waitForExistence(60, INTERVAL);
145             long end = System.currentTimeMillis();
146             sleep(2);
147             addRecord(i, start, end);
148             app.close();
149         }
150     }
151 
152     @Test
153     public void newPresentation() {
154         for (int i = 0; i < 8; i++) {
155             aoo.kill();//make sure app is closed
156             aoo.start();
157             startCenterImpressButton.waitForExistence(120, 1);
158             sleep(2);
159             startCenterImpressButton.click(0.5, 0.5);
160             sleep(1);
161             presentationWizard.click(0.9, 0.95);
162             long start = System.currentTimeMillis();
163             impress.waitForExistence(60, INTERVAL);
164             long end = System.currentTimeMillis();
165             sleep(2);
166             addRecord(i, start, end);
167             app.close();
168         }
169     }
170 
171     @Test
172     public void loadFinishPlainDoc() {
173         loadFinishTextDocument("pvt_benchmark/sw_plain_120p.doc", "Page 1 / ");
174     }
175 
176     @Test
177     public void loadFinishPlainOdt() {
178         loadFinishTextDocument("pvt_benchmark/sw_plain_120p_odf1.2.odt", "Page 1 / ");
179     }
180 
181     @Test
182     public void loadFinishComplexDoc() {
183         loadFinishTextDocument("pvt_benchmark/sw_complex_100p.doc", "Page 1 / ");
184     }
185 
186     @Test
187     public void loadFinishComplexOdt() {
188         loadFinishTextDocument("pvt_benchmark/sw_complex_100p_odf1.2.odt", "Page 1 / ");
189     }
190 
191     public void loadFinishTextDocument(String file, final String indicator) {
192         String path = prepareData(file);
193         aoo.kill();
194         aoo.start();
195         startcenter.waitForExistence(120, 1);
196         for (int i = 0; i < 8; i++) {
197             app.dispatch(".uno:Open");
198             filePickerPath.setText(path);
199             filePickerOpen.click();
200             long start = System.currentTimeMillis();
201             new Condition() {
202 
203                 @Override
204                 public boolean value() {
205                     String text = statusBar.getItemText(0);
206                     if (text == null)
207                         return false;
208                     return text.startsWith(indicator);
209                 }
210 
211             }.waitForTrue("", 120, INTERVAL);
212             long end = System.currentTimeMillis();
213             sleep(2);
214             addRecord(i, start, end);
215             app.dispatch(".uno:CloseDoc");
216         }
217 
218         app.close();
219     }
220 
221     @Test
222     public void loadFinishPlainXLS() {
223         loadFinishTextDocument("pvt_benchmark/sc_plain_4sh_5kcell.xls", "Sheet 2 / 4");
224     }
225 
226     @Test
227     public void loadFinishPlainODS() {
228         loadFinishTextDocument("pvt_benchmark/sc_plain_4sh_5kcell_new_odf1.2.ods", "Sheet 1 / 4");
229     }
230 
231     @Test
232     public void loadFinishComplexXLS() {
233         loadFinishTextDocument("pvt_benchmark/sc_complex_13sh_4kcell.xls", "Sheet 2 / 13");
234     }
235 
236     @Test
237     public void loadFinishComplexODS() {
238         loadFinishTextDocument("pvt_benchmark/sc_complex_13sh_4kcell_new_odf1.2.ods", "Sheet 6 / 13");
239     }
240 
241 
242     @Test
243     public void loadFinishPlainODP() {
244         loadFinishTextDocument("pvt_benchmark/sc_complex_13sh_4kcell_new_odf1.2.ods", "Sheet 6 / 13");
245     }
246 
247     @Test
248     public void loadFinishPlainPPT() {
249         loadFinishTextDocument("pvt_benchmark/sc_complex_13sh_4kcell_new_odf1.2.ods", "Sheet 6 / 13");
250     }
251 
252     @Test
253     public void loadFinishComplexODP() {
254         loadFinishTextDocument("pvt_benchmark/sc_complex_13sh_4kcell_new_odf1.2.ods", "Sheet 6 / 13");
255     }
256 
257     @Test
258     public void loadFinishComplexPPT() {
259         loadFinishTextDocument("pvt_benchmark/sc_complex_13sh_4kcell_new_odf1.2.ods", "Sheet 6 / 13");
260     }
261 
262     public void loadFinish(String file, final String indicator) {
263         String path = prepareData(file);
264         aoo.kill();
265         aoo.start();
266         startcenter.waitForExistence(120, 1);
267         for (int i = 0; i < 8; i++) {
268             app.dispatch(".uno:Open");
269             filePickerPath.setText(path);
270             filePickerOpen.click();
271             long start = System.currentTimeMillis();
272             new Condition() {
273 
274                 @Override
275                 public boolean value() {
276                     String text = statusBar.getItemText(0);
277                     if (text == null)
278                         return false;
279                     return text.startsWith(indicator);
280                 }
281 
282             }.waitForTrue("", 120, INTERVAL);
283             long end = System.currentTimeMillis();
284             sleep(2);
285             addRecord(i, start, end);
286             app.dispatch(".uno:CloseDoc");
287         }
288 
289         app.close();
290     }
291 
292 
293 }
294