blob: 59cc138c89bd8d4b7d3c36e07fd228bc40faa709 [file] [log] [blame]
import { decodeAndTransformProto, FILE_TYPES, FILE_DECODERS } from '../src/decode';
import Tag from '../src/flickerlib/tags/Tag';
import Error from '../src/flickerlib/errors/Error';
import { TaggingEngine } from '../src/flickerlib/common.js';
import fs from 'fs';
import path from 'path';
const tagTrace = '../spec/traces/tag_trace.winscope';
const errorTrace = '../spec/traces/error_trace.winscope';
describe("Tag Transformation", () => {
it("can transform tag traces", () => {
const buffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, tagTrace)));
const data = decodeAndTransformProto(buffer, FILE_DECODERS[FILE_TYPES.TAG_TRACE].decoderParams, true);
expect(data.entries[0].timestamp.toString()).toEqual('159979677861');
expect(data.entries[1].timestamp.toString()).toEqual('161268519083');
expect(data.entries[2].timestamp.toString()).toEqual('161126718496');
expect(data.entries[3].timestamp.toString()).toEqual('161613497398');
expect(data.entries[4].timestamp.toString()).toEqual('161227062777');
expect(data.entries[5].timestamp.toString()).toEqual('161268519083');
expect(data.entries[6].timestamp.toString()).toEqual('161825945076');
expect(data.entries[7].timestamp.toString()).toEqual('162261072567');
expect(data.entries[0].tags).toEqual([new Tag(12345,"PIP_ENTER",true,1,"",0)]);
expect(data.entries[1].tags).toEqual([new Tag(12345,"PIP_ENTER",false,2,"",2)]);
expect(data.entries[2].tags).toEqual([new Tag(67890,"ROTATION",true,3,"",3)]);
expect(data.entries[3].tags).toEqual([new Tag(67890,"ROTATION",false,4,"",4)]);
expect(data.entries[4].tags).toEqual([new Tag(9876,"PIP_EXIT",true,5,"",5)]);
expect(data.entries[5].tags).toEqual([new Tag(9876,"PIP_EXIT",false,6,"",6)]);
expect(data.entries[6].tags).toEqual([new Tag(54321,"IME_APPEAR",true,7,"",7)]);
expect(data.entries[7].tags).toEqual([new Tag(54321,"IME_APPEAR",false,8,"",8)]);
})
});
describe("Detect Tag", () => {
it("can detect tags", () => {
const wmFile = '../spec/traces/regular_rotation_in_last_state_wm_trace.winscope'
const layersFile = '../spec/traces/regular_rotation_in_last_state_layers_trace.winscope'
const wmBuffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, wmFile)));
const layersBuffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, layersFile)));
const wmTrace = decodeAndTransformProto(wmBuffer, FILE_DECODERS[FILE_TYPES.WINDOW_MANAGER_TRACE].decoderParams, true);
const layersTrace = decodeAndTransformProto(layersBuffer, FILE_DECODERS[FILE_TYPES.SURFACE_FLINGER_TRACE].decoderParams, true);
const engine = new TaggingEngine(wmTrace, layersTrace, (text) => { console.log(text) });
const tagTrace = engine.run();
expect(tagTrace.size).toEqual(4);
expect(tagTrace.entries[0].timestamp.toString()).toEqual('280186737540384');
expect(tagTrace.entries[1].timestamp.toString()).toEqual('280187243649340');
expect(tagTrace.entries[2].timestamp.toString()).toEqual('280188522078113');
expect(tagTrace.entries[3].timestamp.toString()).toEqual('280189020672174');
})
});
describe("Error Transformation", () => {
it("can transform error traces", () => {
const buffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, errorTrace)));
const data = decodeAndTransformProto(buffer, FILE_DECODERS[FILE_TYPES.ERROR_TRACE].decoderParams, true);
expect(data.entries[0].timestamp.toString()).toEqual('161401263106');
expect(data.entries[1].timestamp.toString()).toEqual('161126718496');
expect(data.entries[2].timestamp.toString()).toEqual('162261072567');
expect(data.entries[0].errors).toEqual([new Error("","",33,"",33)]);
expect(data.entries[1].errors).toEqual([new Error("","",66,"",66)]);
expect(data.entries[2].errors).toEqual([new Error("","",99,"",99)]);
})
});