SlideShare une entreprise Scribd logo
1  sur  79
Optimizing Mobile Applications
Introduction
Us
Mark Ian
About This Talk
• Getting Good Data
• General Best Practices
• Common Problems & Solutions
• Memory Usage
• CPU Performance
Profiling
Use The Best Tools
• iOS: Instruments
• Android: VTune, Snapdragon Profiler
• Unity Editor
• Timeline
• 5.3: Memory Profiler
Instruments!
• Free, included with XCode
• Works perfectly with Unity IL2CPP builds
• Best tool for mobile CPU profiling
• Best tool for startup time profiling
Instruments! (2)
• Instructions on how to run it:
• http://blogs.unity3d.com/2016/02/01/profiling-with-
instruments/
Instruments CPU Profiler: Startup Time
Instruments CPU Profiler: Runtime
Instruments: Reading the PlayerLoop
• BaseBehaviourManager::CommonUpdate
• Update, FixedUpdate and LateUpdate callbacks
• PhysicsManager::FixedUpdate
• PhysX simulation, OnCollision* and OnTrigger* callbacks
• Physics2DManager::FixedUpdate if using 2D physics
• DelayedCallManager::Update
• Resumed coroutines
Instruments: Reading the PlayerLoop (2)
• PlayerRender
• Draw calls, batching, OnWillRender & image effect callbacks
• UI::CanvasManager::WillRenderCanvases
• UI canvas rebatching, text mesh generation, etc.
• EnlightenRuntimeManager::Update
• Enlighten, precomputed realtime GI, reflection probes
Instruments: Examining a Callback
Instruments: Examining a Coroutine
Instruments: Coroutines (2)
• Coroutine execution is split between two places:
• The method where the coroutine was started.
• i.e. where StartCoroutine() was called
• DelayedCallManager
• StartCoroutine runs all code until the first yield
• DelayedCalledManager runs the rest
Instruments: Summarizing Distributed Costs
• Enter method name into “Search” box
• Suggested searches:
• “::Box”, “Box(“ and “_Box”
• “String_”
Instruments: Identifying Asset Loads
5.3 Memory Profiler
5.3 Memory Profiler
• Download code from Bitbucket
• http://bitbucket.org/Unity-Technologies/MemoryProfiler/
• Drop into an Editor folder inside Assets
• In Unity Editor: Window > MemoryProfilerWindow
• Connect Unity Profiler via Profiler Window
• Click “Take Snapshot”
5.3 Memory Profiler: Duplicated Textures
Examine
these
5.3 Memory Profiler: Duplicated Textures
Same Texture, Different Instances
Same
Different
5.3 Memory Profiler
Assets
Asset Auditing: Preventing Mistakes
• Developers are people (arguably)
• People make mistakes
• Mistakes cost dev time
• Write tools to prevent common, costly errors
Asset Auditing: Common Errors
• Insane texture sizes
• Asset compression
• Improper Avatar/Rig settings
• Different rules for different parts of project
Asset Auditing: HOWTO
public class AssetAuditExample : AssetPostprocessor {
public void OnPreprocessTexture() {
// …
}
public void OnPreprocessModel() {
// …
}
}
Asset Auditing: HOWTO (2)
• AssetPostprocessor classes receive callbacks on import
• Implement OnPreprocess* methods
• Apply your project’s rules to assetImporter instance
Asset Auditing: HOWTO (3)
public class ReadOnlyModelPostprocessor : AssetPostprocessor {
public void OnPreprocessModel() {
ModelImporter modelImporter = (ModelImporter)assetImporter;
if(modelImporter.isReadable) {
modelImporter.isReadable = false;
modelImporter.SaveAndReimport();
}
}
}
Common Rules: Textures
• Make sure Read/Write is disabled
• Disable mipmaps if possible
• Make sure textures are Compressed
• Ensure sizes aren’t too large
• 2048x2048 or 1024x1024 for UI atlases
• 512x512 or smaller for model textures
Common Rules: Models
• Make sure Read/Write is disabled
• Disable rig on non-character models
• Copy avatars for characters with shared rigs
• Enable mesh compression
Common Rules: Audio
• MP3 compression on iOS
• Vorbis compression on Android
• “Force Mono” for mobile games
• Set bitrate as low as possible
Memory in Unity
Managed Memory: How It Works
Texture #1Texture #2Audio ClipMesh
int[] Arraystringstringstring
Heap contains objects allocated for Assets and Scripts
Managed Memory: How It Works
Texture #1Texture #2Audio ClipMesh
int[] Arraystringstringstring
int[] someNumbers = new int[2048];
More memory is allocated when requested by code.
int[] Array
Managed Memory: How It Works
Texture #1Texture #2Audio ClipMesh
int[] Arraystringstringstring
GC.Collect();
Garbage collector runs periodically, looks for unused
objects.
Unused objects are deleted.
int[] Array
Managed Memory: How It Works
Texture #1Texture #2Audio ClipMesh
int[] Arraystring
Holes are not filled. This is Memory Fragmentation.
int[] Array
Managed Memory: How It Works
Texture #1Texture #2Audio ClipMesh
int[] Arraystring
When there isn’t enough space for new objects…
int[] Array
int[] Array
TOO SMALL
Managed Memory: How It Works
Texture #1Texture #2Audio ClipMesh
int[] Arraystring
The heap expands.
int[] Array
int[] Array
Managed Memory: Problems
• In Unity, the heap only expands. It never shrinks.
• iOS & Android still care about reserved pages.
• Detail: Unused blocks of the heap remain reserved, but
are paged out of the working set.
Managed Memory: Problems (2)
• Temporary memory allocations are really bad.
• 1 kilobyte of allocation per frame, 60 FPS
• = 60 kilobytes per second of allocation
• If GC runs once per minute (BAD for framerate)…
• 3600 kilobytes of memory needed!
Tracking Managed Memory Allocations
Use Unity Profiler.
Sort by “GC Alloc” column.
When user can interact with app, stay as
close to zero as possible.
(During loading, allocations aren’t as bad.)
Memory Conservation
• Reuse Collections (Lists, HashSets, etc.)
• Avoid string concatenation
• Reuse StringBuilders to compose strings
• Avoid closures & anonymous methods
Memory Conservation: Boxing
• Happens when passing a value type as a reference
type.
• Value is temporarily allocated on the heap.
• Example:
int x = 1;
object y = new object();
y.Equals(x); // Boxes “x” onto the heap
Memory Conservation: Boxing (2)
• Also happens when using enums as Dictionary keys
• Example:
enum MyEnum { a, b, c };
var myDictionary = new Dictionary<MyEnum, object>();
myDictionary.Add(MyEnum.a, new object()); // Boxes value “MyEnum.a”
• Workaround: Implement IEqualityComparer class
Memory Conservation: Foreach
• Allocates a Enumerator when loop begins
• Specific to Unity’s version of Mono
• Just don’t use it.
Memory Conservation: Unity APIs
• If a Unity API returns an array, it allocates a new copy.
• Every time it is accessed.
• Even if the values do not change.
Memory Conservation: Unity APIs (2)
• This code allocates many Touch[] arrays.
for ( int i = 0; i < Input.touches.Length; i++ )
{
Touch touch = Input.touches[i];
// …
}
Memory Conservation: Unity APIs (3)
• This code allocates only one copy of the Touch[] array.
Touch[] touches = Input.touches;
for ( int i = 0; i < touches.Length; i++ )
{
Touch touch = touches[i];
// …
}
CPU Performance Tips: Loading
XML, JSON & other text formats
• Parsing text is very slow.
• Avoid parsers built on Reflection — extremely slow.
• In 5.3: Use Unity’s JsonUtility class!
• Three strategies to speed up data parsing.
XML/JSON: Reduce Workload
• Strategy 1: Don’t parse text.
• Bake text data to binary
• Use ScriptableObject
• Useful for data that does not change often.
• e.g. Game design parameters
XML/JSON: Reduce Workload (2)
• Strategy 2: Do less work.
• Split data into smaller chunks.
• Parse only the parts that are needed.
• Cache parsing results for later reuse.
XML/JSON: Reduce Workload (3)
• Strategy 3: Threads.
• Pure C# types only.
• No Unity Assets (ScriptableObjects, Textures, etc.)
• Be VERY careful.
Large Prefabs
• All GameObjects & Components in a prefab are
serialized into the prefab’s data file.
• Includes all settings on all Components.
• 2 identical GameObjects in a prefab = 2 copies of data
Large Prefabs (2)
• For very large prefabs, split into smaller parts
• Use Awake callbacks to instantiate duplicated parts
The Resources Folder
• An index of Resources is loaded at startup.
• Cannot be avoided or deferred.
• Solution: Move assets from Resources to Asset
Bundles.
CPU Performance Tips: Runtime
Easy: Material/Animator/Shader Properties
• Never address Material, Shader, or Animator properties
by name.
• Internally, hashes the property name into an integer.
• Don’t do this:
material.SetColor(“_Color”, Color.white);
animator.SetTrigger(“attack”);
Cached Material/Animator/Shader
Properties
• Do hashing at startup, cache results and reuse them.
static readonly int material_Color = Shader.PropertyToID(“_Color”);
static readonly int anim_Attack = Animator.StringToHash(“attack”);
material.SetColor(material_Color, Color.white);
animator.SetTrigger(anim_Attack);
Boxing & String Manipulation
• These are so expensive we had to mention them twice.
• Slow: RegExps, String.StartsWith, String.EndsWith
• Instruments:
• Search for “::Box” and “_Box”
• Search for “String_”
Instruments: Identifying Boxing
Unity UI
Canvases, Draw Calls and Batching
• Canvases “rebuild” their batches to reduce draw calls
• Rebuilds are very expensive.
• A canvas rebuilds if any Drawable component changes.
• Any visual change will force a canvas to rebuild.
• Drawable = anything visible on a canvas.
Canvases, Draw Calls and Batching
• Cost of a rebuild based on number of elements.
• Includes children.
• Frequent changes + lots of UI = lots of CPU usage!
Reducing Batching Cost
• Reduce number of Drawables.
• Merge sprites, merge text objects
• Split up Canvases
• Balance cost of draw calls and cost of batching.
Splitting Canvases
• Can nest a canvas within another canvas
• Nested canvases isolate their children from rebuilds.
• Guideline: Move elements that change every frame onto
separate canvases from static elements.
Splitting Canvases: Example
Splitting Canvases: Example
Images
Splitting Canvases: Example
Change Every Frame Never Change
Splitting Canvases: Example
Dynamic Canvas Background Canvas
Trampolines
Remember…
• Profile before optimizing.
• Apply these techniques only when needed.
How Unity Invokes Callbacks
• Internally, C++ Linked List of Components with callbacks
• Update, LateUpdate, etc.
• Iterate over the Linked List and invoke each callback.
• Small overhead when invoking scripts
How Unity Invokes Callbacks
• If number of callbacks becomes very large, overhead
can become significant.
• Thousands of callbacks: 10-20% of Update CPU time
Replacing Callbacks
• Remove Update, LateUpdate, etc.
• Make a GameObject with a MonoBehaviour
• Implement Update, LateUpdate, and other callbacks on this
object
• All other code: Subscribe to needed callbacks
Replacing Callbacks: UpdateManager
object
public class UpdateManager : MonoBehaviour {
public static UpdateManager Instance { get; set; }
void Awake() { Instance = this; }
public UnityEvent OnUpdate = new UnityEvent();
void Update() {
OnUpdate.Invoke();
}
}
Replacing Callbacks: Advantages
• Eliminates native-to-managed trampoline overhead.
• Objects can intelligently unsubscribe.
• Don’t need to return out of Update callbacks!
• Works well with pooled objects.
Optimizing mobile applications - Ian Dundore, Mark Harkness

Contenu connexe

Tendances

유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.ozlael ozlael
 
【Unite Tokyo 2018】“100 Must-see Assets for 2018” by Virtual YouTuber, Cyber G...
【Unite Tokyo 2018】“100 Must-see Assets for 2018” by Virtual YouTuber, Cyber G...【Unite Tokyo 2018】“100 Must-see Assets for 2018” by Virtual YouTuber, Cyber G...
【Unite Tokyo 2018】“100 Must-see Assets for 2018” by Virtual YouTuber, Cyber G...Unity Technologies Japan K.K.
 
Introduction to the Unreal Development Kit
Introduction to the Unreal Development KitIntroduction to the Unreal Development Kit
Introduction to the Unreal Development KitNick Pruehs
 
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...gamifi.cc
 
Intro to GPGPU Programming with Cuda
Intro to GPGPU Programming with CudaIntro to GPGPU Programming with Cuda
Intro to GPGPU Programming with CudaRob Gillen
 
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~Unity Technologies Japan K.K.
 
Building Multiplayer Games (w/ Unity)
Building Multiplayer Games (w/ Unity)Building Multiplayer Games (w/ Unity)
Building Multiplayer Games (w/ Unity)Noam Gat
 
NVIDIA Gameworks, Libraries and Tools
NVIDIA Gameworks, Libraries and ToolsNVIDIA Gameworks, Libraries and Tools
NVIDIA Gameworks, Libraries and ToolsDevGAMM Conference
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...ozlael ozlael
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computingArka Ghosh
 
UIImageView vs Metal #tryswiftconf
UIImageView vs Metal #tryswiftconfUIImageView vs Metal #tryswiftconf
UIImageView vs Metal #tryswiftconfShuichi Tsutsumi
 
Intro to GPGPU with CUDA (DevLink)
Intro to GPGPU with CUDA (DevLink)Intro to GPGPU with CUDA (DevLink)
Intro to GPGPU with CUDA (DevLink)Rob Gillen
 
School For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsSchool For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsNick Pruehs
 
Game programming with Groovy
Game programming with GroovyGame programming with Groovy
Game programming with GroovyJames Williams
 

Tendances (17)

유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
 
【Unite Tokyo 2018】“100 Must-see Assets for 2018” by Virtual YouTuber, Cyber G...
【Unite Tokyo 2018】“100 Must-see Assets for 2018” by Virtual YouTuber, Cyber G...【Unite Tokyo 2018】“100 Must-see Assets for 2018” by Virtual YouTuber, Cyber G...
【Unite Tokyo 2018】“100 Must-see Assets for 2018” by Virtual YouTuber, Cyber G...
 
Introduction to the Unreal Development Kit
Introduction to the Unreal Development KitIntroduction to the Unreal Development Kit
Introduction to the Unreal Development Kit
 
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
 
Intro to GPGPU Programming with Cuda
Intro to GPGPU Programming with CudaIntro to GPGPU Programming with Cuda
Intro to GPGPU Programming with Cuda
 
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
 
Building Multiplayer Games (w/ Unity)
Building Multiplayer Games (w/ Unity)Building Multiplayer Games (w/ Unity)
Building Multiplayer Games (w/ Unity)
 
Cuda tutorial
Cuda tutorialCuda tutorial
Cuda tutorial
 
NVIDIA Gameworks, Libraries and Tools
NVIDIA Gameworks, Libraries and ToolsNVIDIA Gameworks, Libraries and Tools
NVIDIA Gameworks, Libraries and Tools
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computing
 
UIImageView vs Metal #tryswiftconf
UIImageView vs Metal #tryswiftconfUIImageView vs Metal #tryswiftconf
UIImageView vs Metal #tryswiftconf
 
Intro to GPGPU with CUDA (DevLink)
Intro to GPGPU with CUDA (DevLink)Intro to GPGPU with CUDA (DevLink)
Intro to GPGPU with CUDA (DevLink)
 
School For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsSchool For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine Basics
 
Game programming with Groovy
Game programming with GroovyGame programming with Groovy
Game programming with Groovy
 
CUDA
CUDACUDA
CUDA
 
GPU: Understanding CUDA
GPU: Understanding CUDAGPU: Understanding CUDA
GPU: Understanding CUDA
 

En vedette

뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)ozlael ozlael
 
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Katsutoshi Makino
 
Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)ozlael ozlael
 
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color CourseFilmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Coursehpduiker
 
中級グラフィックス入門~シャドウマッピング総まとめ~
中級グラフィックス入門~シャドウマッピング総まとめ~中級グラフィックス入門~シャドウマッピング総まとめ~
中級グラフィックス入門~シャドウマッピング総まとめ~ProjectAsura
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介Drecom Co., Ltd.
 
Weighted Blended Order Independent Transparency
Weighted Blended Order Independent TransparencyWeighted Blended Order Independent Transparency
Weighted Blended Order Independent Transparencyzokweiron
 
声の実体化体験 - HTML5でつくるデジタルインスタレーション -
声の実体化体験 - HTML5でつくるデジタルインスタレーション -声の実体化体験 - HTML5でつくるデジタルインスタレーション -
声の実体化体験 - HTML5でつくるデジタルインスタレーション -Yamato Honda
 
レイトレ合宿3!!! 5分間アピールプレゼン―Pocol
レイトレ合宿3!!! 5分間アピールプレゼン―Pocolレイトレ合宿3!!! 5分間アピールプレゼン―Pocol
レイトレ合宿3!!! 5分間アピールプレゼン―PocolProjectAsura
 
シェーダ体系の話
シェーダ体系の話シェーダ体系の話
シェーダ体系の話fumoto kazuhiro
 
Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことKatsutoshi Makino
 
レイトレ合宿2!! 3分間アピールプレゼン―Pocol
レイトレ合宿2!! 3分間アピールプレゼン―Pocolレイトレ合宿2!! 3分間アピールプレゼン―Pocol
レイトレ合宿2!! 3分間アピールプレゼン―PocolProjectAsura
 
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…Drecom Co., Ltd.
 
Tabc vol3 テクニカルアーティストを始めるにあたって
Tabc vol3 テクニカルアーティストを始めるにあたってTabc vol3 テクニカルアーティストを始めるにあたって
Tabc vol3 テクニカルアーティストを始めるにあたってfumoto kazuhiro
 
Kansai cedec 2015_fumoto
Kansai cedec 2015_fumotoKansai cedec 2015_fumoto
Kansai cedec 2015_fumotofumoto kazuhiro
 
AI in Games- Steering, Wander and Flocking behavior
AI in Games- Steering, Wander and Flocking behaviorAI in Games- Steering, Wander and Flocking behavior
AI in Games- Steering, Wander and Flocking behaviorナム-Nam Nguyễn
 
Application parallelisation Android - Klaas Vangend
Application parallelisation Android - Klaas VangendApplication parallelisation Android - Klaas Vangend
Application parallelisation Android - Klaas Vangendナム-Nam Nguyễn
 
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜Drecom Co., Ltd.
 
ACES 1.0 OpenColorIO config - Siggraph 2015
ACES 1.0 OpenColorIO config - Siggraph 2015ACES 1.0 OpenColorIO config - Siggraph 2015
ACES 1.0 OpenColorIO config - Siggraph 2015hpduiker
 

En vedette (20)

뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
 
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化
 
Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)
 
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color CourseFilmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
 
中級グラフィックス入門~シャドウマッピング総まとめ~
中級グラフィックス入門~シャドウマッピング総まとめ~中級グラフィックス入門~シャドウマッピング総まとめ~
中級グラフィックス入門~シャドウマッピング総まとめ~
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
 
Weighted Blended Order Independent Transparency
Weighted Blended Order Independent TransparencyWeighted Blended Order Independent Transparency
Weighted Blended Order Independent Transparency
 
Aclt1
Aclt1Aclt1
Aclt1
 
声の実体化体験 - HTML5でつくるデジタルインスタレーション -
声の実体化体験 - HTML5でつくるデジタルインスタレーション -声の実体化体験 - HTML5でつくるデジタルインスタレーション -
声の実体化体験 - HTML5でつくるデジタルインスタレーション -
 
レイトレ合宿3!!! 5分間アピールプレゼン―Pocol
レイトレ合宿3!!! 5分間アピールプレゼン―Pocolレイトレ合宿3!!! 5分間アピールプレゼン―Pocol
レイトレ合宿3!!! 5分間アピールプレゼン―Pocol
 
シェーダ体系の話
シェーダ体系の話シェーダ体系の話
シェーダ体系の話
 
Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだこと
 
レイトレ合宿2!! 3分間アピールプレゼン―Pocol
レイトレ合宿2!! 3分間アピールプレゼン―Pocolレイトレ合宿2!! 3分間アピールプレゼン―Pocol
レイトレ合宿2!! 3分間アピールプレゼン―Pocol
 
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
 
Tabc vol3 テクニカルアーティストを始めるにあたって
Tabc vol3 テクニカルアーティストを始めるにあたってTabc vol3 テクニカルアーティストを始めるにあたって
Tabc vol3 テクニカルアーティストを始めるにあたって
 
Kansai cedec 2015_fumoto
Kansai cedec 2015_fumotoKansai cedec 2015_fumoto
Kansai cedec 2015_fumoto
 
AI in Games- Steering, Wander and Flocking behavior
AI in Games- Steering, Wander and Flocking behaviorAI in Games- Steering, Wander and Flocking behavior
AI in Games- Steering, Wander and Flocking behavior
 
Application parallelisation Android - Klaas Vangend
Application parallelisation Android - Klaas VangendApplication parallelisation Android - Klaas Vangend
Application parallelisation Android - Klaas Vangend
 
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
 
ACES 1.0 OpenColorIO config - Siggraph 2015
ACES 1.0 OpenColorIO config - Siggraph 2015ACES 1.0 OpenColorIO config - Siggraph 2015
ACES 1.0 OpenColorIO config - Siggraph 2015
 

Similaire à Optimizing mobile applications - Ian Dundore, Mark Harkness

【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法Unity Technologies Japan K.K.
 
Optimization in Unity: simple tips for developing with "no surprises" / Anton...
Optimization in Unity: simple tips for developing with "no surprises" / Anton...Optimization in Unity: simple tips for developing with "no surprises" / Anton...
Optimization in Unity: simple tips for developing with "no surprises" / Anton...DevGAMM Conference
 
The Good, the Bad and the Ugly things to do with android
The Good, the Bad and the Ugly things to do with androidThe Good, the Bad and the Ugly things to do with android
The Good, the Bad and the Ugly things to do with androidStanojko Markovik
 
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティスUnity Technologies Japan K.K.
 
Preventing Complexity in Game Programming
Preventing Complexity in Game ProgrammingPreventing Complexity in Game Programming
Preventing Complexity in Game ProgrammingYaser Zhian
 
Profiling tools and Android Performance patterns
Profiling tools and Android Performance patternsProfiling tools and Android Performance patterns
Profiling tools and Android Performance patternsicemobile
 
High Performance With Java
High Performance With JavaHigh Performance With Java
High Performance With Javamalduarte
 
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...Lviv Startup Club
 
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
GDC 2010 - A Dynamic Component Architecture for High Performance GameplayGDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
GDC 2010 - A Dynamic Component Architecture for High Performance GameplayTerrance Cohen
 
What's new in Xamarin.iOS, by Miguel de Icaza
What's new in Xamarin.iOS, by Miguel de IcazaWhat's new in Xamarin.iOS, by Miguel de Icaza
What's new in Xamarin.iOS, by Miguel de IcazaXamarin
 
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...Terrance Cohen
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disquszeeg
 
Vulnerability, exploit to metasploit
Vulnerability, exploit to metasploitVulnerability, exploit to metasploit
Vulnerability, exploit to metasploitTiago Henriques
 
Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1Andrei KUCHARAVY
 
One-Byte Modification for Breaking Memory Forensic Analysis
One-Byte Modification for Breaking Memory Forensic AnalysisOne-Byte Modification for Breaking Memory Forensic Analysis
One-Byte Modification for Breaking Memory Forensic AnalysisTakahiro Haruyama
 
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろうUnity Technologies Japan K.K.
 
Treasure Data Summer Internship 2016
Treasure Data Summer Internship 2016Treasure Data Summer Internship 2016
Treasure Data Summer Internship 2016Yuta Iwama
 
Cansecwest_16_Dont_Trust_Your_Eye_Apple_Graphics_Is_Compromised
Cansecwest_16_Dont_Trust_Your_Eye_Apple_Graphics_Is_CompromisedCansecwest_16_Dont_Trust_Your_Eye_Apple_Graphics_Is_Compromised
Cansecwest_16_Dont_Trust_Your_Eye_Apple_Graphics_Is_CompromisedLiang Chen
 

Similaire à Optimizing mobile applications - Ian Dundore, Mark Harkness (20)

【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
 
Optimization in Unity: simple tips for developing with "no surprises" / Anton...
Optimization in Unity: simple tips for developing with "no surprises" / Anton...Optimization in Unity: simple tips for developing with "no surprises" / Anton...
Optimization in Unity: simple tips for developing with "no surprises" / Anton...
 
DIY Java Profiling
DIY Java ProfilingDIY Java Profiling
DIY Java Profiling
 
The Good, the Bad and the Ugly things to do with android
The Good, the Bad and the Ugly things to do with androidThe Good, the Bad and the Ugly things to do with android
The Good, the Bad and the Ugly things to do with android
 
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
 
Preventing Complexity in Game Programming
Preventing Complexity in Game ProgrammingPreventing Complexity in Game Programming
Preventing Complexity in Game Programming
 
Profiling tools and Android Performance patterns
Profiling tools and Android Performance patternsProfiling tools and Android Performance patterns
Profiling tools and Android Performance patterns
 
High Performance With Java
High Performance With JavaHigh Performance With Java
High Performance With Java
 
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
 
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
GDC 2010 - A Dynamic Component Architecture for High Performance GameplayGDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
 
What's new in Xamarin.iOS, by Miguel de Icaza
What's new in Xamarin.iOS, by Miguel de IcazaWhat's new in Xamarin.iOS, by Miguel de Icaza
What's new in Xamarin.iOS, by Miguel de Icaza
 
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disqus
 
Vulnerability, exploit to metasploit
Vulnerability, exploit to metasploitVulnerability, exploit to metasploit
Vulnerability, exploit to metasploit
 
Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1
 
One-Byte Modification for Breaking Memory Forensic Analysis
One-Byte Modification for Breaking Memory Forensic AnalysisOne-Byte Modification for Breaking Memory Forensic Analysis
One-Byte Modification for Breaking Memory Forensic Analysis
 
Qtp - Introduction to synchronization
Qtp -  Introduction to synchronizationQtp -  Introduction to synchronization
Qtp - Introduction to synchronization
 
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
 
Treasure Data Summer Internship 2016
Treasure Data Summer Internship 2016Treasure Data Summer Internship 2016
Treasure Data Summer Internship 2016
 
Cansecwest_16_Dont_Trust_Your_Eye_Apple_Graphics_Is_Compromised
Cansecwest_16_Dont_Trust_Your_Eye_Apple_Graphics_Is_CompromisedCansecwest_16_Dont_Trust_Your_Eye_Apple_Graphics_Is_Compromised
Cansecwest_16_Dont_Trust_Your_Eye_Apple_Graphics_Is_Compromised
 

Plus de ozlael ozlael

유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.ozlael ozlael
 
Infinity Blade and beyond
Infinity Blade and beyondInfinity Blade and beyond
Infinity Blade and beyondozlael ozlael
 
스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기ozlael ozlael
 
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)ozlael ozlael
 
Introduce coco2dx with cookingstar
Introduce coco2dx with cookingstarIntroduce coco2dx with cookingstar
Introduce coco2dx with cookingstarozlael ozlael
 
Deferred rendering case study
Deferred rendering case studyDeferred rendering case study
Deferred rendering case studyozlael ozlael
 
Kgc make stereo game on pc
Kgc make stereo game on pcKgc make stereo game on pc
Kgc make stereo game on pcozlael ozlael
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blogozlael ozlael
 
Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3ozlael ozlael
 
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)ozlael ozlael
 
Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]ozlael ozlael
 
Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2ozlael ozlael
 

Plus de ozlael ozlael (20)

유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
 
Infinity Blade and beyond
Infinity Blade and beyondInfinity Blade and beyond
Infinity Blade and beyond
 
스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기
 
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
 
Introduce coco2dx with cookingstar
Introduce coco2dx with cookingstarIntroduce coco2dx with cookingstar
Introduce coco2dx with cookingstar
 
Deferred rendering case study
Deferred rendering case studyDeferred rendering case study
Deferred rendering case study
 
Kgc make stereo game on pc
Kgc make stereo game on pcKgc make stereo game on pc
Kgc make stereo game on pc
 
mssao presentation
mssao presentationmssao presentation
mssao presentation
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blog
 
Modern gpu optimize
Modern gpu optimizeModern gpu optimize
Modern gpu optimize
 
Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3
 
DOF Depth of Field
DOF Depth of FieldDOF Depth of Field
DOF Depth of Field
 
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
 
Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]
 
Deferred shading
Deferred shadingDeferred shading
Deferred shading
 
Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2
 
Ssao
SsaoSsao
Ssao
 
Deferred lighting
Deferred lightingDeferred lighting
Deferred lighting
 
Inferred lighting
Inferred lightingInferred lighting
Inferred lighting
 
DOF
DOFDOF
DOF
 

Dernier

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Dernier (20)

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Optimizing mobile applications - Ian Dundore, Mark Harkness

  • 1.
  • 5. About This Talk • Getting Good Data • General Best Practices • Common Problems & Solutions • Memory Usage • CPU Performance
  • 7. Use The Best Tools • iOS: Instruments • Android: VTune, Snapdragon Profiler • Unity Editor • Timeline • 5.3: Memory Profiler
  • 8. Instruments! • Free, included with XCode • Works perfectly with Unity IL2CPP builds • Best tool for mobile CPU profiling • Best tool for startup time profiling
  • 9. Instruments! (2) • Instructions on how to run it: • http://blogs.unity3d.com/2016/02/01/profiling-with- instruments/
  • 12. Instruments: Reading the PlayerLoop • BaseBehaviourManager::CommonUpdate • Update, FixedUpdate and LateUpdate callbacks • PhysicsManager::FixedUpdate • PhysX simulation, OnCollision* and OnTrigger* callbacks • Physics2DManager::FixedUpdate if using 2D physics • DelayedCallManager::Update • Resumed coroutines
  • 13. Instruments: Reading the PlayerLoop (2) • PlayerRender • Draw calls, batching, OnWillRender & image effect callbacks • UI::CanvasManager::WillRenderCanvases • UI canvas rebatching, text mesh generation, etc. • EnlightenRuntimeManager::Update • Enlighten, precomputed realtime GI, reflection probes
  • 16. Instruments: Coroutines (2) • Coroutine execution is split between two places: • The method where the coroutine was started. • i.e. where StartCoroutine() was called • DelayedCallManager • StartCoroutine runs all code until the first yield • DelayedCalledManager runs the rest
  • 17. Instruments: Summarizing Distributed Costs • Enter method name into “Search” box • Suggested searches: • “::Box”, “Box(“ and “_Box” • “String_”
  • 20. 5.3 Memory Profiler • Download code from Bitbucket • http://bitbucket.org/Unity-Technologies/MemoryProfiler/ • Drop into an Editor folder inside Assets • In Unity Editor: Window > MemoryProfilerWindow • Connect Unity Profiler via Profiler Window • Click “Take Snapshot”
  • 21. 5.3 Memory Profiler: Duplicated Textures Examine these
  • 22. 5.3 Memory Profiler: Duplicated Textures Same Texture, Different Instances Same Different
  • 25. Asset Auditing: Preventing Mistakes • Developers are people (arguably) • People make mistakes • Mistakes cost dev time • Write tools to prevent common, costly errors
  • 26. Asset Auditing: Common Errors • Insane texture sizes • Asset compression • Improper Avatar/Rig settings • Different rules for different parts of project
  • 27. Asset Auditing: HOWTO public class AssetAuditExample : AssetPostprocessor { public void OnPreprocessTexture() { // … } public void OnPreprocessModel() { // … } }
  • 28. Asset Auditing: HOWTO (2) • AssetPostprocessor classes receive callbacks on import • Implement OnPreprocess* methods • Apply your project’s rules to assetImporter instance
  • 29. Asset Auditing: HOWTO (3) public class ReadOnlyModelPostprocessor : AssetPostprocessor { public void OnPreprocessModel() { ModelImporter modelImporter = (ModelImporter)assetImporter; if(modelImporter.isReadable) { modelImporter.isReadable = false; modelImporter.SaveAndReimport(); } } }
  • 30. Common Rules: Textures • Make sure Read/Write is disabled • Disable mipmaps if possible • Make sure textures are Compressed • Ensure sizes aren’t too large • 2048x2048 or 1024x1024 for UI atlases • 512x512 or smaller for model textures
  • 31. Common Rules: Models • Make sure Read/Write is disabled • Disable rig on non-character models • Copy avatars for characters with shared rigs • Enable mesh compression
  • 32. Common Rules: Audio • MP3 compression on iOS • Vorbis compression on Android • “Force Mono” for mobile games • Set bitrate as low as possible
  • 34. Managed Memory: How It Works Texture #1Texture #2Audio ClipMesh int[] Arraystringstringstring Heap contains objects allocated for Assets and Scripts
  • 35. Managed Memory: How It Works Texture #1Texture #2Audio ClipMesh int[] Arraystringstringstring int[] someNumbers = new int[2048]; More memory is allocated when requested by code. int[] Array
  • 36. Managed Memory: How It Works Texture #1Texture #2Audio ClipMesh int[] Arraystringstringstring GC.Collect(); Garbage collector runs periodically, looks for unused objects. Unused objects are deleted. int[] Array
  • 37. Managed Memory: How It Works Texture #1Texture #2Audio ClipMesh int[] Arraystring Holes are not filled. This is Memory Fragmentation. int[] Array
  • 38. Managed Memory: How It Works Texture #1Texture #2Audio ClipMesh int[] Arraystring When there isn’t enough space for new objects… int[] Array int[] Array TOO SMALL
  • 39. Managed Memory: How It Works Texture #1Texture #2Audio ClipMesh int[] Arraystring The heap expands. int[] Array int[] Array
  • 40. Managed Memory: Problems • In Unity, the heap only expands. It never shrinks. • iOS & Android still care about reserved pages. • Detail: Unused blocks of the heap remain reserved, but are paged out of the working set.
  • 41. Managed Memory: Problems (2) • Temporary memory allocations are really bad. • 1 kilobyte of allocation per frame, 60 FPS • = 60 kilobytes per second of allocation • If GC runs once per minute (BAD for framerate)… • 3600 kilobytes of memory needed!
  • 42. Tracking Managed Memory Allocations Use Unity Profiler. Sort by “GC Alloc” column. When user can interact with app, stay as close to zero as possible. (During loading, allocations aren’t as bad.)
  • 43. Memory Conservation • Reuse Collections (Lists, HashSets, etc.) • Avoid string concatenation • Reuse StringBuilders to compose strings • Avoid closures & anonymous methods
  • 44. Memory Conservation: Boxing • Happens when passing a value type as a reference type. • Value is temporarily allocated on the heap. • Example: int x = 1; object y = new object(); y.Equals(x); // Boxes “x” onto the heap
  • 45. Memory Conservation: Boxing (2) • Also happens when using enums as Dictionary keys • Example: enum MyEnum { a, b, c }; var myDictionary = new Dictionary<MyEnum, object>(); myDictionary.Add(MyEnum.a, new object()); // Boxes value “MyEnum.a” • Workaround: Implement IEqualityComparer class
  • 46. Memory Conservation: Foreach • Allocates a Enumerator when loop begins • Specific to Unity’s version of Mono • Just don’t use it.
  • 47. Memory Conservation: Unity APIs • If a Unity API returns an array, it allocates a new copy. • Every time it is accessed. • Even if the values do not change.
  • 48. Memory Conservation: Unity APIs (2) • This code allocates many Touch[] arrays. for ( int i = 0; i < Input.touches.Length; i++ ) { Touch touch = Input.touches[i]; // … }
  • 49. Memory Conservation: Unity APIs (3) • This code allocates only one copy of the Touch[] array. Touch[] touches = Input.touches; for ( int i = 0; i < touches.Length; i++ ) { Touch touch = touches[i]; // … }
  • 51. XML, JSON & other text formats • Parsing text is very slow. • Avoid parsers built on Reflection — extremely slow. • In 5.3: Use Unity’s JsonUtility class! • Three strategies to speed up data parsing.
  • 52. XML/JSON: Reduce Workload • Strategy 1: Don’t parse text. • Bake text data to binary • Use ScriptableObject • Useful for data that does not change often. • e.g. Game design parameters
  • 53. XML/JSON: Reduce Workload (2) • Strategy 2: Do less work. • Split data into smaller chunks. • Parse only the parts that are needed. • Cache parsing results for later reuse.
  • 54. XML/JSON: Reduce Workload (3) • Strategy 3: Threads. • Pure C# types only. • No Unity Assets (ScriptableObjects, Textures, etc.) • Be VERY careful.
  • 55. Large Prefabs • All GameObjects & Components in a prefab are serialized into the prefab’s data file. • Includes all settings on all Components. • 2 identical GameObjects in a prefab = 2 copies of data
  • 56. Large Prefabs (2) • For very large prefabs, split into smaller parts • Use Awake callbacks to instantiate duplicated parts
  • 57. The Resources Folder • An index of Resources is loaded at startup. • Cannot be avoided or deferred. • Solution: Move assets from Resources to Asset Bundles.
  • 59. Easy: Material/Animator/Shader Properties • Never address Material, Shader, or Animator properties by name. • Internally, hashes the property name into an integer. • Don’t do this: material.SetColor(“_Color”, Color.white); animator.SetTrigger(“attack”);
  • 60. Cached Material/Animator/Shader Properties • Do hashing at startup, cache results and reuse them. static readonly int material_Color = Shader.PropertyToID(“_Color”); static readonly int anim_Attack = Animator.StringToHash(“attack”); material.SetColor(material_Color, Color.white); animator.SetTrigger(anim_Attack);
  • 61. Boxing & String Manipulation • These are so expensive we had to mention them twice. • Slow: RegExps, String.StartsWith, String.EndsWith • Instruments: • Search for “::Box” and “_Box” • Search for “String_”
  • 64. Canvases, Draw Calls and Batching • Canvases “rebuild” their batches to reduce draw calls • Rebuilds are very expensive. • A canvas rebuilds if any Drawable component changes. • Any visual change will force a canvas to rebuild. • Drawable = anything visible on a canvas.
  • 65. Canvases, Draw Calls and Batching • Cost of a rebuild based on number of elements. • Includes children. • Frequent changes + lots of UI = lots of CPU usage!
  • 66. Reducing Batching Cost • Reduce number of Drawables. • Merge sprites, merge text objects • Split up Canvases • Balance cost of draw calls and cost of batching.
  • 67. Splitting Canvases • Can nest a canvas within another canvas • Nested canvases isolate their children from rebuilds. • Guideline: Move elements that change every frame onto separate canvases from static elements.
  • 70. Splitting Canvases: Example Change Every Frame Never Change
  • 71. Splitting Canvases: Example Dynamic Canvas Background Canvas
  • 73. Remember… • Profile before optimizing. • Apply these techniques only when needed.
  • 74. How Unity Invokes Callbacks • Internally, C++ Linked List of Components with callbacks • Update, LateUpdate, etc. • Iterate over the Linked List and invoke each callback. • Small overhead when invoking scripts
  • 75. How Unity Invokes Callbacks • If number of callbacks becomes very large, overhead can become significant. • Thousands of callbacks: 10-20% of Update CPU time
  • 76. Replacing Callbacks • Remove Update, LateUpdate, etc. • Make a GameObject with a MonoBehaviour • Implement Update, LateUpdate, and other callbacks on this object • All other code: Subscribe to needed callbacks
  • 77. Replacing Callbacks: UpdateManager object public class UpdateManager : MonoBehaviour { public static UpdateManager Instance { get; set; } void Awake() { Instance = this; } public UnityEvent OnUpdate = new UnityEvent(); void Update() { OnUpdate.Invoke(); } }
  • 78. Replacing Callbacks: Advantages • Eliminates native-to-managed trampoline overhead. • Objects can intelligently unsubscribe. • Don’t need to return out of Update callbacks! • Works well with pooled objects.