1/*
2 * Copyright 2017, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17const LAYER_TRACE_MAGIC_NUMBER = [0x09, 0x4c, 0x59, 0x52, 0x54, 0x52, 0x41, 0x43, 0x45] // .LYRTRACE
18const WINDOW_TRACE_MAGIC_NUMBER = [0x09, 0x57, 0x49, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x45] // .WINTRACE
19
20function arrayEquals(a, b) {
21  if (a.length !== b.length) {
22    return false;
23  }
24  for (var i = 0; i < a.length; i++) {
25    if (a[i] != b[i]) {
26      return false;
27    }
28  }
29  return true;
30}
31
32function arrayStartsWith(array, prefix) {
33  return arrayEquals(array.slice(0, prefix.length), prefix);
34}
35
36/** buffer: Uint8Array */
37function detect(buffer) {
38  if (arrayStartsWith(buffer, LAYER_TRACE_MAGIC_NUMBER)) {
39    return 'layers_trace'
40  }
41  if (arrayStartsWith(buffer, WINDOW_TRACE_MAGIC_NUMBER)) {
42    return 'window_trace'
43  }
44  if (arrayStartsWith(buffer, [0x12])) {
45     // Because policy is empty, the first field in the dump is 2 currently.
46     // This might change.
47    return 'window_dump';
48  }
49  if (arrayStartsWith(buffer, [0x0a])) {
50    // For now; window_dump might soon start with 0x0a too.
51    return 'layers_dump';
52  }
53}
54
55export default detect;
56