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