xref: /aosp_15_r20/development/tools/ota_analysis/src/components/PayloadComposition.vue (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker<template>
2*90c8c64dSAndroid Build Coastguard Worker  <PartialCheckbox
3*90c8c64dSAndroid Build Coastguard Worker    v-model="partitionInclude"
4*90c8c64dSAndroid Build Coastguard Worker    :labels="updatePartitions"
5*90c8c64dSAndroid Build Coastguard Worker  />
6*90c8c64dSAndroid Build Coastguard Worker  <div v-if="echartsData">
7*90c8c64dSAndroid Build Coastguard Worker    <PieChart :echartsData="echartsData" />
8*90c8c64dSAndroid Build Coastguard Worker  </div>
9*90c8c64dSAndroid Build Coastguard Worker  <v-divider />
10*90c8c64dSAndroid Build Coastguard Worker  <v-row>
11*90c8c64dSAndroid Build Coastguard Worker    <v-col
12*90c8c64dSAndroid Build Coastguard Worker      cols="12"
13*90c8c64dSAndroid Build Coastguard Worker      md="6"
14*90c8c64dSAndroid Build Coastguard Worker    >
15*90c8c64dSAndroid Build Coastguard Worker      <v-btn
16*90c8c64dSAndroid Build Coastguard Worker        block
17*90c8c64dSAndroid Build Coastguard Worker        @click="updateChart('blocks')"
18*90c8c64dSAndroid Build Coastguard Worker      >
19*90c8c64dSAndroid Build Coastguard Worker        Analyse Installed Blocks (in target build)
20*90c8c64dSAndroid Build Coastguard Worker      </v-btn>
21*90c8c64dSAndroid Build Coastguard Worker    </v-col>
22*90c8c64dSAndroid Build Coastguard Worker    <v-col
23*90c8c64dSAndroid Build Coastguard Worker      cols="12"
24*90c8c64dSAndroid Build Coastguard Worker      md="6"
25*90c8c64dSAndroid Build Coastguard Worker    >
26*90c8c64dSAndroid Build Coastguard Worker      <v-btn
27*90c8c64dSAndroid Build Coastguard Worker        block
28*90c8c64dSAndroid Build Coastguard Worker        @click="updateChart('payload')"
29*90c8c64dSAndroid Build Coastguard Worker      >
30*90c8c64dSAndroid Build Coastguard Worker        Analyse Payload Composition
31*90c8c64dSAndroid Build Coastguard Worker      </v-btn>
32*90c8c64dSAndroid Build Coastguard Worker    </v-col>
33*90c8c64dSAndroid Build Coastguard Worker  </v-row>
34*90c8c64dSAndroid Build Coastguard Worker  <v-row>
35*90c8c64dSAndroid Build Coastguard Worker    <v-col
36*90c8c64dSAndroid Build Coastguard Worker      cols="12"
37*90c8c64dSAndroid Build Coastguard Worker      md="6"
38*90c8c64dSAndroid Build Coastguard Worker      class="tooltip"
39*90c8c64dSAndroid Build Coastguard Worker    >
40*90c8c64dSAndroid Build Coastguard Worker      <v-btn
41*90c8c64dSAndroid Build Coastguard Worker        :disabled="manifest.nonAB"
42*90c8c64dSAndroid Build Coastguard Worker        block
43*90c8c64dSAndroid Build Coastguard Worker        @click="updateChart('COWmerge')"
44*90c8c64dSAndroid Build Coastguard Worker      >
45*90c8c64dSAndroid Build Coastguard Worker        Analyse COW Merge Operations
46*90c8c64dSAndroid Build Coastguard Worker      </v-btn>
47*90c8c64dSAndroid Build Coastguard Worker      <span
48*90c8c64dSAndroid Build Coastguard Worker        v-if="manifest.nonAB"
49*90c8c64dSAndroid Build Coastguard Worker        class="tooltiptext"
50*90c8c64dSAndroid Build Coastguard Worker      >
51*90c8c64dSAndroid Build Coastguard Worker        This function is only supported in A/B OTA
52*90c8c64dSAndroid Build Coastguard Worker      </span>
53*90c8c64dSAndroid Build Coastguard Worker    </v-col>
54*90c8c64dSAndroid Build Coastguard Worker    <v-col
55*90c8c64dSAndroid Build Coastguard Worker      cols="12"
56*90c8c64dSAndroid Build Coastguard Worker      md="6"
57*90c8c64dSAndroid Build Coastguard Worker    >
58*90c8c64dSAndroid Build Coastguard Worker      <v-btn
59*90c8c64dSAndroid Build Coastguard Worker        block
60*90c8c64dSAndroid Build Coastguard Worker        :disabled="!targetFile"
61*90c8c64dSAndroid Build Coastguard Worker        @click="updateChart('extensions')"
62*90c8c64dSAndroid Build Coastguard Worker      >
63*90c8c64dSAndroid Build Coastguard Worker        Analyse File Extensions
64*90c8c64dSAndroid Build Coastguard Worker      </v-btn>
65*90c8c64dSAndroid Build Coastguard Worker    </v-col>
66*90c8c64dSAndroid Build Coastguard Worker  </v-row>
67*90c8c64dSAndroid Build Coastguard Worker  <v-row>
68*90c8c64dSAndroid Build Coastguard Worker    <v-col
69*90c8c64dSAndroid Build Coastguard Worker      cols="12"
70*90c8c64dSAndroid Build Coastguard Worker      md="6"
71*90c8c64dSAndroid Build Coastguard Worker    />
72*90c8c64dSAndroid Build Coastguard Worker    <v-col
73*90c8c64dSAndroid Build Coastguard Worker      cols="12"
74*90c8c64dSAndroid Build Coastguard Worker      md="6"
75*90c8c64dSAndroid Build Coastguard Worker    >
76*90c8c64dSAndroid Build Coastguard Worker      <BaseFile
77*90c8c64dSAndroid Build Coastguard Worker        v-if="!demo"
78*90c8c64dSAndroid Build Coastguard Worker        label="Drag and drop or Select The target Android build"
79*90c8c64dSAndroid Build Coastguard Worker        @file-select="selectBuild"
80*90c8c64dSAndroid Build Coastguard Worker      />
81*90c8c64dSAndroid Build Coastguard Worker    </v-col>
82*90c8c64dSAndroid Build Coastguard Worker  </v-row>
83*90c8c64dSAndroid Build Coastguard Worker</template>
84*90c8c64dSAndroid Build Coastguard Worker
85*90c8c64dSAndroid Build Coastguard Worker<script>
86*90c8c64dSAndroid Build Coastguard Workerimport axios from 'axios'
87*90c8c64dSAndroid Build Coastguard Workerimport PartialCheckbox from '@/components/PartialCheckbox.vue'
88*90c8c64dSAndroid Build Coastguard Workerimport PieChart from '@/components/PieChart.vue'
89*90c8c64dSAndroid Build Coastguard Workerimport BaseFile from '@/components/BaseFile.vue'
90*90c8c64dSAndroid Build Coastguard Workerimport { analysePartitions } from '../services/payload_composition.js'
91*90c8c64dSAndroid Build Coastguard Workerimport { chromeos_update_engine as update_metadata_pb } from '../services/update_metadata_pb.js'
92*90c8c64dSAndroid Build Coastguard Worker
93*90c8c64dSAndroid Build Coastguard Workerexport default {
94*90c8c64dSAndroid Build Coastguard Worker  components: {
95*90c8c64dSAndroid Build Coastguard Worker    PartialCheckbox,
96*90c8c64dSAndroid Build Coastguard Worker    PieChart,
97*90c8c64dSAndroid Build Coastguard Worker    BaseFile,
98*90c8c64dSAndroid Build Coastguard Worker  },
99*90c8c64dSAndroid Build Coastguard Worker  props: {
100*90c8c64dSAndroid Build Coastguard Worker    manifest: {
101*90c8c64dSAndroid Build Coastguard Worker      type: update_metadata_pb.DeltaArchiveManifest,
102*90c8c64dSAndroid Build Coastguard Worker      default: () => [],
103*90c8c64dSAndroid Build Coastguard Worker    },
104*90c8c64dSAndroid Build Coastguard Worker    demo: {
105*90c8c64dSAndroid Build Coastguard Worker      type: Boolean,
106*90c8c64dSAndroid Build Coastguard Worker      default: false
107*90c8c64dSAndroid Build Coastguard Worker    }
108*90c8c64dSAndroid Build Coastguard Worker  },
109*90c8c64dSAndroid Build Coastguard Worker  data() {
110*90c8c64dSAndroid Build Coastguard Worker    return {
111*90c8c64dSAndroid Build Coastguard Worker      partitionInclude: new Map(),
112*90c8c64dSAndroid Build Coastguard Worker      echartsData: null,
113*90c8c64dSAndroid Build Coastguard Worker      listData: '',
114*90c8c64dSAndroid Build Coastguard Worker      targetFile: null,
115*90c8c64dSAndroid Build Coastguard Worker    }
116*90c8c64dSAndroid Build Coastguard Worker  },
117*90c8c64dSAndroid Build Coastguard Worker  computed: {
118*90c8c64dSAndroid Build Coastguard Worker    updatePartitions() {
119*90c8c64dSAndroid Build Coastguard Worker      return this.manifest.partitions.map((partition) => {
120*90c8c64dSAndroid Build Coastguard Worker        return partition.partitionName
121*90c8c64dSAndroid Build Coastguard Worker      })
122*90c8c64dSAndroid Build Coastguard Worker    },
123*90c8c64dSAndroid Build Coastguard Worker  },
124*90c8c64dSAndroid Build Coastguard Worker  async mounted() {
125*90c8c64dSAndroid Build Coastguard Worker    if (this.demo) {
126*90c8c64dSAndroid Build Coastguard Worker      try {
127*90c8c64dSAndroid Build Coastguard Worker        const download = await axios.get(
128*90c8c64dSAndroid Build Coastguard Worker          './files/cf_x86_target_file_demo.zip',
129*90c8c64dSAndroid Build Coastguard Worker          {responseType: 'blob'}
130*90c8c64dSAndroid Build Coastguard Worker        )
131*90c8c64dSAndroid Build Coastguard Worker        this.targetFile = new File([download.data], 'target_demo.zip')
132*90c8c64dSAndroid Build Coastguard Worker      } catch (err) {
133*90c8c64dSAndroid Build Coastguard Worker        console.log('Please put a proper example target file in /public/files/')
134*90c8c64dSAndroid Build Coastguard Worker      }
135*90c8c64dSAndroid Build Coastguard Worker    }
136*90c8c64dSAndroid Build Coastguard Worker  },
137*90c8c64dSAndroid Build Coastguard Worker  methods: {
138*90c8c64dSAndroid Build Coastguard Worker    async updateChart(metrics) {
139*90c8c64dSAndroid Build Coastguard Worker      let partitionSelected = this.manifest.partitions.filter((partition) =>
140*90c8c64dSAndroid Build Coastguard Worker        this.partitionInclude.get(partition.partitionName)
141*90c8c64dSAndroid Build Coastguard Worker      )
142*90c8c64dSAndroid Build Coastguard Worker      try {
143*90c8c64dSAndroid Build Coastguard Worker        this.echartsData = await analysePartitions(
144*90c8c64dSAndroid Build Coastguard Worker          metrics,
145*90c8c64dSAndroid Build Coastguard Worker          partitionSelected,
146*90c8c64dSAndroid Build Coastguard Worker          this.manifest.blockSize,
147*90c8c64dSAndroid Build Coastguard Worker          this.targetFile
148*90c8c64dSAndroid Build Coastguard Worker        )
149*90c8c64dSAndroid Build Coastguard Worker      } catch (err) {
150*90c8c64dSAndroid Build Coastguard Worker        alert('Cannot be processed for the following issue: ', err)
151*90c8c64dSAndroid Build Coastguard Worker      }
152*90c8c64dSAndroid Build Coastguard Worker    },
153*90c8c64dSAndroid Build Coastguard Worker    selectBuild(files) {
154*90c8c64dSAndroid Build Coastguard Worker      //TODO(lishutong) check the version of target file is same to the OTA target
155*90c8c64dSAndroid Build Coastguard Worker      this.targetFile = files[0]
156*90c8c64dSAndroid Build Coastguard Worker    },
157*90c8c64dSAndroid Build Coastguard Worker  },
158*90c8c64dSAndroid Build Coastguard Worker}
159*90c8c64dSAndroid Build Coastguard Worker</script>
160*90c8c64dSAndroid Build Coastguard Worker
161*90c8c64dSAndroid Build Coastguard Worker<style scoped>
162*90c8c64dSAndroid Build Coastguard Worker.list-data {
163*90c8c64dSAndroid Build Coastguard Worker  text-align: center;
164*90c8c64dSAndroid Build Coastguard Worker}
165*90c8c64dSAndroid Build Coastguard Worker.tooltip {
166*90c8c64dSAndroid Build Coastguard Worker  position: relative;
167*90c8c64dSAndroid Build Coastguard Worker  display: inline-block;
168*90c8c64dSAndroid Build Coastguard Worker}
169*90c8c64dSAndroid Build Coastguard Worker
170*90c8c64dSAndroid Build Coastguard Worker.tooltip .tooltiptext {
171*90c8c64dSAndroid Build Coastguard Worker  visibility: hidden;
172*90c8c64dSAndroid Build Coastguard Worker  width: 120px;
173*90c8c64dSAndroid Build Coastguard Worker  background-color: black;
174*90c8c64dSAndroid Build Coastguard Worker  color: #fff;
175*90c8c64dSAndroid Build Coastguard Worker  text-align: center;
176*90c8c64dSAndroid Build Coastguard Worker  border-radius: 6px;
177*90c8c64dSAndroid Build Coastguard Worker  padding: 5px 0;
178*90c8c64dSAndroid Build Coastguard Worker  position: absolute;
179*90c8c64dSAndroid Build Coastguard Worker  z-index: 1;
180*90c8c64dSAndroid Build Coastguard Worker}
181*90c8c64dSAndroid Build Coastguard Worker
182*90c8c64dSAndroid Build Coastguard Worker.tooltip:hover .tooltiptext {
183*90c8c64dSAndroid Build Coastguard Worker  visibility: visible;
184*90c8c64dSAndroid Build Coastguard Worker}
185*90c8c64dSAndroid Build Coastguard Worker</style>