Statistics
| Revision:

root / branches / Mobile_Compatible_Hito_1 / libFMap / src-test / org / gvsig / data / datastores / vectorial / file / shp / PerformanceTest.java @ 21606

History | View | Annotate | Download (5.08 KB)

1
package org.gvsig.data.datastores.vectorial.file.shp;
2

    
3
import java.io.File;
4
import java.util.Date;
5

    
6
import junit.framework.TestCase;
7

    
8
import org.apache.log4j.FileAppender;
9
import org.apache.log4j.Level;
10
import org.apache.log4j.Logger;
11
import org.apache.log4j.PatternLayout;
12
import org.gvsig.data.datastores.vectorial.file.shp_jni.JNISHPStore;
13
import org.gvsig.data.datastores.vectorial.file.shp_mem.MemSHPStore;
14

    
15
import es.prodevelop.gvsig.mobile.fmap.layer.newmodel.FPerformanceTestVectorLayer;
16
import es.prodevelop.gvsig.mobile.fmap.util.ResourceReader;
17
import es.prodevelop.gvsig.mobile.fmap.util.Utils;
18
import es.prodevelop.gvsig.mobile.fmap.util.string.StringUtilities;
19

    
20
/**
21
 * This class tests the performance of three SHP drivers implemented for gvSIG Mobile.
22
 * These drivers are compatible with the new data access model (june 2008)
23
 * and will share a lot of code with gvsig Desktop.
24
 * 
25
 * The right testdata folder is needed.
26
 * 
27
 *  
28
 * @author jldominguez
29
 *
30
 */
31
public class PerformanceTest extends TestCase {
32
        
33
        private static Logger logger = Logger.getLogger(PerformanceTest.class);
34
        public static String SD_FOLDER = "Tarjeta SD";
35

    
36
        /**
37
         * Number of sample executions
38
         */
39
        public static final int REPEAT_TIMES = 5;
40
        
41
        public static final String[] SIZE_TEST_BASE_FILE_NAMES = {
42
                "point_", "polygon_" };
43
        
44
        public static final int[] SIZE_TEST_FILE_SIZES = {
45
                10,
46
                200,
47
                1000,
48
                8000,
49
                40000,
50
                200000 };
51
        
52
        public static final int[] SIZE_TEST_FILE_SIZES_JNI = {
53
                10,
54
                200,
55
                1000,
56
                8000,
57
                40000 };
58
        
59
        public static final int[] SIZE_TEST_FILE_SIZES_MEM = {
60
                10,
61
                200,
62
                1000,
63
                8000 };
64
        public static final String[] FEATURE_SIZE_TEST_FEATURE_TYPES = {
65
                "few", "medium", "many" };
66
        public static final String FEATURE_SIZE_TEST_BASE_FILE_NAME = "VerticesPerFeature.shp";
67

    
68
        public static void main(String[] args) {
69
                junit.textui.TestRunner.run(PerformanceTest.class);
70
        }
71

    
72
        protected void setUp() throws Exception {
73
                super.setUp();
74
        }
75

    
76
        public void testInitialize() {
77
                initLogger();
78

    
79
                new SHPStore();
80
                 testShpDriver(SHPStore.DATASTORE_NAME);
81
                
82
                new MemSHPStore();
83
                testShpDriver(MemSHPStore.DATASTORE_NAME);
84
                
85
                new JNISHPStore();
86
                testShpDriver(JNISHPStore.DATASTORE_NAME);
87
        }
88

    
89
        private void testShpDriver(String storename) {
90
                File shpFile = null;
91

    
92
                int[] sizes = SIZE_TEST_FILE_SIZES;
93
                if (storename.compareTo(JNISHPStore.DATASTORE_NAME) == 0) {
94
                        sizes = SIZE_TEST_FILE_SIZES_JNI;
95
                } else {
96
                        if (storename.compareTo(MemSHPStore.DATASTORE_NAME) == 0) {
97
                                sizes = SIZE_TEST_FILE_SIZES_MEM;
98
                        }
99
                }
100
                
101
                // ---------- size test
102
                for (int i=0; i<sizes.length; i++) {
103
                        int size = sizes[i];
104
                        for (int j=0; j<SIZE_TEST_BASE_FILE_NAMES.length; j++) {
105
                                String base_name = SIZE_TEST_BASE_FILE_NAMES[j];
106
                                String filename = base_name + size + ".shp";
107
                                
108
                                if (Utils.USING_PDA) {
109
                                        shpFile = ResourceReader.getPdaTestFile(SD_FOLDER, "testdata", filename);
110
                                } else {
111
                                        shpFile = ResourceReader.getResourceFile("testdata", filename);
112
                                }
113

    
114
                                performance(shpFile, storename);
115
                        }
116
                }
117

    
118
                // ---------- feature size test
119
                for (int i=0; i<FEATURE_SIZE_TEST_FEATURE_TYPES.length; i++) {
120
                        String feat_type = FEATURE_SIZE_TEST_FEATURE_TYPES[i];
121
                        String filename = feat_type + FEATURE_SIZE_TEST_BASE_FILE_NAME;
122
                        if (Utils.USING_PDA) {
123
                                shpFile = ResourceReader.getPdaTestFile(SD_FOLDER, "testdata", filename);
124
                        } else {
125
                                shpFile = ResourceReader.getResourceFile("testdata", filename);
126
                        }
127
                        performance(shpFile, storename);
128
                }
129
        }
130

    
131
        private void initLogger() {
132

    
133
                Date now = new Date(System.currentTimeMillis());
134
                String nowstr = now.toString();
135
                
136
                nowstr = StringUtilities.replace(nowstr, " ", "_");
137
                nowstr = StringUtilities.replace(nowstr, ":", "_") + ".txt";
138
                
139
                
140
                String outlogpath = "";
141
                
142
                if (Utils.USING_PDA) {
143
                        outlogpath = ResourceReader.getPdaTestFile(SD_FOLDER, "testdata", "performance_" + nowstr).getAbsolutePath();
144
                } else {
145
                        outlogpath = ResourceReader.getResourceFile("testdata", "performance_" + nowstr).getAbsolutePath();
146
                }
147

    
148
                System.out.println("Log file: " + outlogpath);
149

    
150
                try {
151
                    PatternLayout l = new PatternLayout("%5p [%t] - %m%n");
152
                    FileAppender fa = new FileAppender(l, outlogpath, false);
153
                    // ConsoleAppender ca = new ConsoleAppender(l);
154
                    Logger.getRootLogger().setLevel(Level.DEBUG);
155
                    Logger.getRootLogger().addAppender(fa);
156
                    // Logger.getRootLogger().addAppender(ca);
157
                } catch (Exception ex) {
158
                        System.err.println("Error while initializing log4j: " + ex.getMessage());
159
                }
160
                
161
        }
162

    
163
        private void performance(File file, String st_name) {
164

    
165
                if (!file.exists()) return;
166
                FPerformanceTestVectorLayer lyr = null;
167
                try {
168
                        lyr = new FPerformanceTestVectorLayer(file, logger, st_name);
169
                        for (int i=0; i<REPEAT_TIMES; i++) {
170
                                lyr.draw(null, null);
171
                        }
172
                } catch (Exception e) {
173
                        logger.debug("PERFORMANCE_TEST LAYER " + file.getName() + " STORE " + st_name + " ERROR " + e.getMessage());
174
                }
175
                
176
                if (lyr != null) lyr.clean();
177
                System.gc();
178
                lyr = null;
179
                System.gc();
180
        }
181

    
182

    
183
        private boolean acceptablySimilar(double expec, double area, double tol) {
184
                double diff = Math.abs(expec - area);
185
                return ((diff / Math.abs((expec + area) / 2)) < tol);
186
        }
187
        
188
}