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>