Files
frameworks_base/tests/DumpRenderTree2/src/com/android/dumprendertree2/SummarizerDBHelper.java
Maksymilian Osowski 394e0fb849 Updated Summarizer to use SQLite DB.
It avoids OOM issues by dumping the memory to the DB every
few hundred tests and then reading them in chunks when
generating summaries, etc.

Change-Id: I5f63d960d456f17e9f2189230a7ae0ca5607ce51
2010-09-17 16:35:46 +01:00

129 lines
4.2 KiB
Java

/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dumprendertree2;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.HashSet;
import java.util.Set;
/**
* A basic class that wraps database accesses inside itself and provides functionality to
* store and retrieve AbstractResults.
*/
public class SummarizerDBHelper {
private static final String KEY_ID = "id";
private static final String KEY_PATH = "path";
private static final String KEY_BYTES = "bytes";
private static final String DATABASE_NAME = "SummarizerDB";
private static final int DATABASE_VERSION = 1;
static final String EXPECTED_FAILURES_TABLE = "expectedFailures";
static final String UNEXPECTED_FAILURES_TABLE = "unexpectedFailures";
static final String EXPECTED_PASSES_TABLE = "expextedPasses";
static final String UNEXPECTED_PASSES_TABLE = "unexpextedPasses";
private static final Set<String> TABLES_NAMES = new HashSet<String>();
{
TABLES_NAMES.add(EXPECTED_FAILURES_TABLE);
TABLES_NAMES.add(EXPECTED_PASSES_TABLE);
TABLES_NAMES.add(UNEXPECTED_FAILURES_TABLE);
TABLES_NAMES.add(UNEXPECTED_PASSES_TABLE);
}
private static final void createTables(SQLiteDatabase db) {
String cmd;
for (String tableName : TABLES_NAMES) {
cmd = "create table " + tableName + " ("
+ KEY_ID + " integer primary key autoincrement, "
+ KEY_PATH + " text not null, "
+ KEY_BYTES + " blob not null);";
db.execSQL(cmd);
}
}
private static final void dropTables(SQLiteDatabase db) {
for (String tableName : TABLES_NAMES) {
db.execSQL("DROP TABLE IF EXISTS " + tableName);
}
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
dropTables(db);
createTables(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
/** NOOP for now, because we will never upgrade the db */
}
public void reset(SQLiteDatabase db) {
dropTables(db);
createTables(db);
}
}
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private final Context mContext;
public SummarizerDBHelper(Context ctx) {
mContext = ctx;
mDbHelper = new DatabaseHelper(mContext);
}
public void reset() {
mDbHelper.reset(this.mDb);
}
public void open() throws SQLException {
mDb = mDbHelper.getWritableDatabase();
}
public void close() {
mDbHelper.close();
}
public void insertAbstractResult(AbstractResult result, String table) {
ContentValues cv = new ContentValues();
cv.put(KEY_PATH, result.getRelativePath());
cv.put(KEY_BYTES, result.getBytes());
mDb.insert(table, null, cv);
}
public Cursor getAbstractResults(String table) throws SQLException {
return mDb.query(false, table, new String[] {KEY_BYTES}, null, null, null, null,
KEY_PATH + " ASC", null);
}
public static AbstractResult getAbstractResult(Cursor cursor) {
return AbstractResult.create(cursor.getBlob(cursor.getColumnIndex(KEY_BYTES)));
}
}