回答編集履歴
4
修正
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
![AddOnce](e56be96b12195edb9520de596c9f57f8.png)
|
54
54
|
|
55
|
-
AddOnce内ではAddMethod()を呼んでいるだけなのでSelfが0.2。ほんとは0のはずですがAddTwice()の結
|
55
|
+
AddOnce内ではAddMethod()を呼んでいるだけなのでSelfが0.2。ほんとは0のはずですがAddTwice()の結果から誤差かと思います。
|
56
56
|
|
57
57
|
|
58
58
|
|
3
修正
test
CHANGED
@@ -158,10 +158,10 @@
|
|
158
158
|
|
159
159
|
検証していないからです。ですが、それなりの自信があるので回答させていただきました。
|
160
160
|
|
161
|
-
ProfilerのCPU Hierarchyはフレーム内に処理が収まっているかを確認する為のものです。収まらなければ処理落ち、収まればスムーズに動きます。もしSelfとTotalの値が合算でない場合を想像してみてください。フレームに収まらない処理をProfilerで見つけるのがかなり困難になります。なのでドキュメントに載せない。合算で当たり前なの
|
161
|
+
ProfilerのCPU Hierarchyはフレーム内に処理が収まっているかを確認する為のものです。収まらなければ処理落ち、収まればスムーズに動きます。もしSelfとTotalの値が合算でない場合を想像してみてください。フレームに収まらない処理をProfilerで見つけるのがかなり困難になります。なのでドキュメントに載せない。合算で当たり前なのかもしれません。
|
162
162
|
|
163
163
|
|
164
164
|
|
165
|
-
necosさんが疑問に思う姿勢はすごく正しいことだと思います。当たり前はとても怖いです。
|
165
|
+
ですが、necosさんが疑問に思う姿勢はすごく正しいことだと思います。当たり前はとても怖いです。
|
166
166
|
|
167
167
|
なので今回検証することにしました。今回の検証でスッキリしていただけましたら幸いです。
|
2
追記
test
CHANGED
@@ -7,3 +7,161 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
なので「Calls==10だとしたら10回呼ばれた結果が関数だけの処理ならSelfの値、関数完了までにすべて呼ばれた処理はTotalの値」になるはずです。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
### (追記)検証してみました
|
14
|
+
|
15
|
+
Calls、Self、Totalの関係を検証してみました。
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
**▼検証環境**
|
20
|
+
|
21
|
+
Unity 2017.3.0p3
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
**▼検証内容**
|
26
|
+
|
27
|
+
テスト1回目 重い処理を1度実行 [関数名 AddOnce()]
|
28
|
+
|
29
|
+
テスト2回目 重い処理を2度続けて実行 [関数名 AddTwice()]
|
30
|
+
|
31
|
+
上記2度のテストでCalls、Self、Totalの関係性を調査しました。
|
32
|
+
|
33
|
+
※ 検証しやすいようにCoroutineを使っています。
|
34
|
+
|
35
|
+
※ AddOnce()、AddTwice()共にAddMethod()という重い処理を呼ぶ構成です。
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
**▼検証結果**
|
40
|
+
|
41
|
+
思っていたのと同じ結果です。
|
42
|
+
|
43
|
+
・Calls==10だとしたらSelf、Total共に合算の負荷が表示される
|
44
|
+
|
45
|
+
・関数だけの処理ならSelfに表示
|
46
|
+
|
47
|
+
・関数+外部関数を含めた処理ならTotalに表示
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
**AddOnce()実行結果**
|
52
|
+
|
53
|
+
![AddOnce](e56be96b12195edb9520de596c9f57f8.png)
|
54
|
+
|
55
|
+
AddOnce内ではAddMethod()を呼んでいるだけなのでSelfが0.2。ほんとは0のはずですがAddTwice()の結界から誤差かと思います。
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
**AddTwice()実行結果**
|
60
|
+
|
61
|
+
![イメージ説明](1254ce5aa6f2dce4db373c538a04ce40.png)
|
62
|
+
|
63
|
+
AddTwice()内ではAddMethod()を2回呼んでいるので、AddMethod()のCallsが2に増えているのでCalls数は合ってます。そして、Selfが0、TotalがAddOnce()時のほぼ2倍なので合算で間違いないと思います。AddOnce()と誤差がありますが、EditorOverheadの値も違うので色々なものが影響していると思います。
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
**▼検証コード**
|
68
|
+
|
69
|
+
```C#
|
70
|
+
|
71
|
+
using System.Collections;
|
72
|
+
|
73
|
+
using UnityEngine;
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
public class ProfilerTest : MonoBehaviour
|
78
|
+
|
79
|
+
{
|
80
|
+
|
81
|
+
IEnumerator Start()
|
82
|
+
|
83
|
+
{
|
84
|
+
|
85
|
+
yield return new WaitForSeconds(1);
|
86
|
+
|
87
|
+
AddOnce();
|
88
|
+
|
89
|
+
//AddTwice();
|
90
|
+
|
91
|
+
}
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
void AddOnce()
|
96
|
+
|
97
|
+
{
|
98
|
+
|
99
|
+
AddMethod();
|
100
|
+
|
101
|
+
}
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
void AddTwice()
|
106
|
+
|
107
|
+
{
|
108
|
+
|
109
|
+
AddMethod();
|
110
|
+
|
111
|
+
AddMethod();
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
void AddMethod()
|
118
|
+
|
119
|
+
{
|
120
|
+
|
121
|
+
var c = 0;
|
122
|
+
|
123
|
+
for (int i = 0; i < 500000; i++)
|
124
|
+
|
125
|
+
{
|
126
|
+
|
127
|
+
c += i;
|
128
|
+
|
129
|
+
}
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
ShowConsole(c);
|
134
|
+
|
135
|
+
}
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
void ShowConsole(int count)
|
140
|
+
|
141
|
+
{
|
142
|
+
|
143
|
+
Debug.Log(count.ToString());
|
144
|
+
|
145
|
+
}
|
146
|
+
|
147
|
+
}
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
```
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
### 最後に
|
156
|
+
|
157
|
+
なぜ、「なるはずです」なのか?
|
158
|
+
|
159
|
+
検証していないからです。ですが、それなりの自信があるので回答させていただきました。
|
160
|
+
|
161
|
+
ProfilerのCPU Hierarchyはフレーム内に処理が収まっているかを確認する為のものです。収まらなければ処理落ち、収まればスムーズに動きます。もしSelfとTotalの値が合算でない場合を想像してみてください。フレームに収まらない処理をProfilerで見つけるのがかなり困難になります。なのでドキュメントに載せない。合算で当たり前なのでしょう。
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
necosさんが疑問に思う姿勢はすごく正しいことだと思います。当たり前はとても怖いです。
|
166
|
+
|
167
|
+
なので今回検証することにしました。今回の検証でスッキリしていただけましたら幸いです。
|
1
修正
test
CHANGED
@@ -6,4 +6,4 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
なので「Calls==10だとしたら10回呼ばれた結果がSelfの値」になるはずです。
|
9
|
+
なので「Calls==10だとしたら10回呼ばれた結果が関数だけの処理ならSelfの値、関数完了までにすべて呼ばれた処理はTotalの値」になるはずです。
|