回答編集履歴

4

修正

2018/02/02 04:00

投稿

IShix
IShix

スコア1724

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

修正

2018/02/02 03:59

投稿

IShix
IShix

スコア1724

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

追記

2018/02/01 14:02

投稿

IShix
IShix

スコア1724

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

修正

2018/02/01 14:01

投稿

IShix
IShix

スコア1724

test CHANGED
@@ -6,4 +6,4 @@
6
6
 
7
7
 
8
8
 
9
- なので「Calls==10だとしたら10回呼ばれた結果がSelfの値」になるはずです。
9
+ なので「Calls==10だとしたら10回呼ばれた結果が関数だけの処理ならSelfの値、関数完了までにすべて呼ばれた処理はTotalの値」になるはずです。