1 /* 2 * Copyright (C) 2015 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 17 package com.android.loganalysis.parser; 18 19 import com.android.loganalysis.item.BatteryDischargeStatsInfoItem; 20 import com.android.loganalysis.item.BatteryStatsDetailedInfoItem; 21 import com.android.loganalysis.item.DumpsysBatteryStatsItem; 22 import com.android.loganalysis.item.BatteryStatsSummaryInfoItem; 23 24 import java.util.List; 25 26 27 /** 28 * A {@link IParser} to parse the battery stats section of the bugreport 29 */ 30 public class DumpsysBatteryStatsParser extends AbstractSectionParser { 31 32 private static final String SUMMARY_INFO_SECTION_REGEX = 33 "Battery History \\(\\d+% used, \\d+(KB)? used of \\d+KB, \\d+ strings using " 34 + "\\d+(KB)?\\):$"; 35 private static final String DISCHARGE_STATS_INFO_SECTION_REGEX = "^Discharge step durations:$"; 36 private static final String DETAILED_INFO_SECTION_REGEX = "^Statistics since last charge:$"; 37 38 // We are not using this sections and will be ignored. 39 private static final String NOOP_SECTION_REGEX = 40 "^(Statistics since last unplugged:|Daily stats:)$"; 41 42 private BatteryStatsSummaryInfoParser mSummaryParser = new BatteryStatsSummaryInfoParser(); 43 private BatteryStatsDetailedInfoParser mDetailedParser = new BatteryStatsDetailedInfoParser(); 44 private BatteryDischargeStatsInfoParser mDischargeStepsParser = new 45 BatteryDischargeStatsInfoParser(); 46 47 private DumpsysBatteryStatsItem mDumpsysBatteryStatsItem = null; 48 private boolean mParsedInput = false; 49 50 /** 51 * {@inheritDoc} 52 * 53 * @return The {@link DumpsysBatteryStatsItem} 54 */ 55 @Override parse(List<String> lines)56 public DumpsysBatteryStatsItem parse(List<String> lines) { 57 setup(); 58 for (String line : lines) { 59 if (!mParsedInput && !"".equals(line.trim())) { 60 mParsedInput = true; 61 } 62 parseLine(line); 63 } 64 commit(); 65 return mDumpsysBatteryStatsItem; 66 } 67 68 /** 69 * Sets up the parser by adding the section parsers. 70 */ setup()71 protected void setup() { 72 addSectionParser(mSummaryParser, SUMMARY_INFO_SECTION_REGEX); 73 addSectionParser(mDetailedParser, DETAILED_INFO_SECTION_REGEX); 74 addSectionParser(mDischargeStepsParser, DISCHARGE_STATS_INFO_SECTION_REGEX); 75 addSectionParser(new NoopParser(), NOOP_SECTION_REGEX); 76 } 77 78 /** 79 * {@inheritDoc} 80 */ 81 @Override commit()82 protected void commit() { 83 // signal EOF 84 super.commit(); 85 if (mParsedInput) { 86 if (mDumpsysBatteryStatsItem == null) { 87 mDumpsysBatteryStatsItem = new DumpsysBatteryStatsItem(); 88 } 89 } 90 91 if (mDumpsysBatteryStatsItem != null) { 92 mDumpsysBatteryStatsItem.setBatteryStatsSummarytem( 93 (BatteryStatsSummaryInfoItem) getSection(mSummaryParser)); 94 mDumpsysBatteryStatsItem.setDetailedBatteryStatsItem( 95 (BatteryStatsDetailedInfoItem) getSection(mDetailedParser)); 96 mDumpsysBatteryStatsItem.setBatteryDischargeStatsItem( 97 (BatteryDischargeStatsInfoItem) getSection(mDischargeStepsParser)); 98 } 99 } 100 } 101