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 package com.android.loganalysis.item; 17 18 import org.json.JSONException; 19 import org.json.JSONObject; 20 21 import java.util.Arrays; 22 import java.util.HashSet; 23 import java.util.Map; 24 25 /** 26 * Contains a list of processes and which type of memory they are using, both in foreground and 27 * background. 28 */ 29 public class MemoryHealthItem extends GenericItem { 30 private static final String BACKGROUND = "background"; 31 private static final String FOREGROUND = "foreground"; 32 33 public static final String DALVIK_AVG = "dalvik_avg"; 34 public static final String NATIVE_AVG = "native_avg"; 35 public static final String PSS_AVG = "pss_avg"; 36 public static final String DALVIK_PEAK = "dalvik_peak"; 37 public static final String NATIVE_PEAK = "native_peak"; 38 public static final String PSS_PEAK = "pss_peak"; 39 40 public static final String SUMMARY_JAVA_HEAP_AVG = "summary_java_heap_avg"; 41 public static final String SUMMARY_NATIVE_HEAP_AVG = "summary_native_heap_avg"; 42 public static final String SUMMARY_CODE_AVG = "summary_code_avg"; 43 public static final String SUMMARY_STACK_AVG = "summary_stack_avg"; 44 public static final String SUMMARY_GRAPHICS_AVG = "summary_graphics_avg"; 45 public static final String SUMMARY_OTHER_AVG = "summary_other_avg"; 46 public static final String SUMMARY_SYSTEM_AVG = "summary_system_avg"; 47 public static final String SUMMARY_OVERALL_PSS_AVG = "summary_overall_pss_avg"; 48 MemoryHealthItem(Map<String, Map<String, Long>> foreground, Map<String, Map<String, Long>> background)49 public MemoryHealthItem(Map<String, Map<String, Long>> foreground, 50 Map<String, Map<String, Long>> background) { 51 super(new HashSet<String>(Arrays.asList(FOREGROUND, BACKGROUND))); 52 super.setAttribute(FOREGROUND, foreground); 53 super.setAttribute(BACKGROUND, background); 54 } 55 56 /** 57 * Returns breakdown of memory usage of foreground processes. 58 * @return Map that stores breakdown of memory usage 59 */ 60 @SuppressWarnings("unchecked") getForeground()61 public Map<String, Map<String, Long>> getForeground() { 62 return (Map<String, Map<String, Long>>) super.getAttribute(FOREGROUND); 63 } 64 65 /** 66 * Returns breakdown of memory usage of foreground processes. 67 * @return Map that stores breakdown of memory usage 68 */ 69 @SuppressWarnings("unchecked") getBackground()70 public Map<String, Map<String, Long>> getBackground() { 71 return (Map<String, Map<String, Long>>) super.getAttribute(BACKGROUND); 72 } 73 74 @Override toJson()75 public JSONObject toJson() { 76 JSONObject memoryHealth = new JSONObject(); 77 try { 78 memoryHealth.put(FOREGROUND, mapToJson(getForeground())); 79 memoryHealth.put(BACKGROUND, mapToJson(getBackground())); 80 } catch (JSONException e) { 81 // ignore 82 } 83 return memoryHealth; 84 } 85 mapToJson(Map<String, Map<String, Long>> map)86 private JSONObject mapToJson(Map<String, Map<String, Long>> map) { 87 JSONObject out = new JSONObject(); 88 for (Map.Entry<String, Map<String, Long>> entry : map.entrySet()) { 89 try { 90 out.put(entry.getKey(), processToJson(entry.getValue())); 91 } catch (JSONException e) { 92 // ignore 93 } 94 } 95 return out; 96 } 97 processToJson(Map<String, Long> map)98 private JSONObject processToJson(Map<String, Long> map) { 99 JSONObject out = new JSONObject(); 100 for (Map.Entry<String, Long> entry : map.entrySet()) { 101 try { 102 out.put(entry.getKey(), entry.getValue()); 103 } catch (JSONException e) { 104 // ignore 105 } 106 } 107 return out; 108 } 109 } 110