1 /* 2 * Copyright (C) 2018 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 androidx.constraintlayout.core; 17 18 import java.util.ArrayList; 19 20 /** 21 * Utility class to track metrics during the system resolution 22 */ 23 public class Metrics { 24 public long measuresWidgetsDuration; // time spent in child measures in nanoseconds 25 public long measuresLayoutDuration; // time spent in child measures in nanoseconds 26 public long measuredWidgets; 27 public long measuredMatchWidgets; 28 public long measures; 29 public long additionalMeasures; 30 public long resolutions; 31 public long tableSizeIncrease; 32 public long minimize; 33 public long constraints; 34 public long simpleconstraints; 35 public long optimize; 36 public long iterations; 37 public long pivots; 38 public long bfs; 39 public long variables; 40 public long errors; 41 public long slackvariables; 42 public long extravariables; 43 public long maxTableSize; 44 public long fullySolved; 45 public long graphOptimizer; 46 public long graphSolved; 47 public long linearSolved; 48 public long resolvedWidgets; 49 public long minimizeGoal; 50 public long maxVariables; 51 public long maxRows; 52 public long nonresolvedWidgets; 53 public ArrayList<String> problematicLayouts = new ArrayList<>(); 54 public long lastTableSize; 55 public long widgets; 56 public long measuresWrap; 57 public long measuresWrapInfeasible; 58 public long infeasibleDetermineGroups; 59 public long determineGroups; 60 public long layouts; 61 public long grouping; 62 public int mNumberOfLayouts; // the number of times ConstraintLayout onLayout gets called 63 public int mNumberOfMeasures; // the number of times child measures gets called 64 public long mMeasureDuration; // time spent in measure in nanoseconds 65 public long mChildCount; // number of child Views of ConstraintLayout 66 public long mMeasureCalls; // number of time CL onMeasure is called 67 public long mSolverPasses; 68 public long mEquations; 69 public long mVariables; 70 public long mSimpleEquations; 71 72 // @TODO: add description 73 @Override toString()74 public String toString() { 75 return "\n*** Metrics ***\n" 76 + "measures: " + measures + "\n" 77 + "measuresWrap: " + measuresWrap + "\n" 78 + "measuresWrapInfeasible: " + measuresWrapInfeasible + "\n" 79 + "determineGroups: " + determineGroups + "\n" 80 + "infeasibleDetermineGroups: " + infeasibleDetermineGroups + "\n" 81 + "graphOptimizer: " + graphOptimizer + "\n" 82 + "widgets: " + widgets + "\n" 83 + "graphSolved: " + graphSolved + "\n" 84 + "linearSolved: " + linearSolved + "\n"; 85 } 86 87 // @TODO: add description reset()88 public void reset() { 89 measures = 0; 90 widgets = 0; 91 additionalMeasures = 0; 92 resolutions = 0; 93 tableSizeIncrease = 0; 94 maxTableSize = 0; 95 lastTableSize = 0; 96 maxVariables = 0; 97 maxRows = 0; 98 minimize = 0; 99 minimizeGoal = 0; 100 constraints = 0; 101 simpleconstraints = 0; 102 optimize = 0; 103 iterations = 0; 104 pivots = 0; 105 bfs = 0; 106 variables = 0; 107 errors = 0; 108 slackvariables = 0; 109 extravariables = 0; 110 fullySolved = 0; 111 graphOptimizer = 0; 112 graphSolved = 0; 113 resolvedWidgets = 0; 114 nonresolvedWidgets = 0; 115 linearSolved = 0; 116 problematicLayouts.clear(); 117 mNumberOfMeasures = 0; 118 mNumberOfLayouts = 0; 119 measuresWidgetsDuration = 0; 120 measuresLayoutDuration = 0; 121 mChildCount = 0; 122 mMeasureDuration = 0; 123 mMeasureCalls = 0; 124 mSolverPasses = 0; 125 mVariables = 0; 126 mEquations = 0; 127 mSimpleEquations = 0; 128 } 129 130 /** 131 * Copy the values from and existing Metrics class 132 * @param metrics 133 */ copy(Metrics metrics)134 public void copy(Metrics metrics) { 135 mVariables = metrics.mVariables; 136 mEquations = metrics.mEquations; 137 mSimpleEquations = metrics.mSimpleEquations; 138 mNumberOfMeasures = metrics.mNumberOfMeasures; 139 mNumberOfLayouts = metrics.mNumberOfLayouts; 140 mMeasureDuration = metrics.mMeasureDuration; 141 mChildCount = metrics.mChildCount; 142 mMeasureCalls = metrics.mMeasureCalls; 143 measuresWidgetsDuration = metrics.measuresWidgetsDuration; 144 mSolverPasses = metrics.mSolverPasses; 145 146 measuresLayoutDuration = metrics.measuresLayoutDuration; 147 measures = metrics.measures; 148 widgets = metrics.widgets; 149 additionalMeasures = metrics.additionalMeasures; 150 resolutions = metrics.resolutions; 151 tableSizeIncrease = metrics.tableSizeIncrease; 152 maxTableSize = metrics.maxTableSize; 153 lastTableSize = metrics.lastTableSize; 154 maxVariables = metrics.maxVariables; 155 maxRows = metrics.maxRows; 156 minimize = metrics.minimize; 157 minimizeGoal = metrics.minimizeGoal; 158 constraints = metrics.constraints; 159 simpleconstraints = metrics.simpleconstraints; 160 optimize = metrics.optimize; 161 iterations = metrics.iterations; 162 pivots = metrics.pivots; 163 bfs = metrics.bfs; 164 variables = metrics.variables; 165 errors = metrics.errors; 166 slackvariables = metrics.slackvariables; 167 extravariables = metrics.extravariables; 168 fullySolved = metrics.fullySolved; 169 graphOptimizer = metrics.graphOptimizer; 170 graphSolved = metrics.graphSolved; 171 resolvedWidgets = metrics.resolvedWidgets; 172 nonresolvedWidgets = metrics.nonresolvedWidgets; 173 } 174 } 175