SlideShare a Scribd company logo
1 of 105
Download to read offline
あ…ありのまま 今 起こった事を話すぜ!
おれはTextureViewで
プロジェクトを開始していたと思ったら
いつのまにかSurfaceViewに戻っていた
株式会社トップゲート
山下武志@eaglesakura
諸事情により、
ABC2014Spring版から
一部の画像が削除されています
Effective Androidと
ちょっと違う方向性だが
そんなセッションで大丈夫か?
自己紹介
山下武志
@eaglesakura
著書
初めてのOpenGL ES
コピペではじめる
Androidゲームプログラミング
Effective Android
宣伝
OpenGL ES Android/iOS対応
基礎編
4月発売予定
宣伝
OpenGL ES Android/iOS対応
応用編
5月発売予定
今日の話がなんと本に?
これから20分間何を話すのか
Effective Androidで
語り足りなかった
TextureViewへの怨嗟の呻き声
あるいは、如何にして
俺が地獄へ落ちたか
TextureViewとは
TextureViewが
どれだけ素晴らしいか
君たちに教えてあげよう
2011年11月
Android 4.0リリース
G⃝⃝gle「すっげーView作ったったwwwww」
TextureViewの特徴①
SurfaceViewと違ってWindowを作らない
SurfaceViewの仕組み
SurfaceView
Activity
SurfaceView
SurfaceViewの仕組み
SurfaceViewはActivityの
「手前」か「奥」にしか
描画できない
SurfaceViewの仕組み
Viewという名前が付いてるけど、
実装はタダのWindowである。
SurfaceViewの仕組み
Viewと同じ座標にWindowを生成して
Viewっぽく見せてるけど、Window。
ImageView
SurfaceViewの仕組み
SurfaceView
ボタン
こういう複雑なレイアウトは
作ることが出来ない
ImageView
TextureViewの仕組み
TextureView
ボタン
TextureViewは「View」である。
複雑なレイアウトもおk
TextureViewの特徴①
TextureViewはViewである。
ImageView
TextureViewの仕組み
TextureView
ボタン
TextureViewは「View」である。
動的にレイアウトの移動も出来る
ImageView
TextureViewの仕組み
TextureView
ボタン
TextureViewは「View」である。
回転も出来る
ImageView
TextureViewの仕組み
TextureView
ボタン
TextureViewは「View」である。
ALPHAも使える
うはwwww便利wwwww
TextureViewの特徴②
EGLSurface用
native_windowとして使える
TextureViewの特徴②
つまりは
OpenGL ESの描画が行える
TextureViewの特徴②
あと、
カメラのプレビューとかにも
使える
うはwwww便利wwwww
TextureViewの特徴③
SurfaceViewに比べて
ライフサイクルが簡略化されている
SurfaceViewのライフサイクル
・surfaceChanged
・surfaceCreated
・surfaceDestroyed
ライフサイクルタイミング
・Activity#onCreate
・Activity#onPause
・Activity#onResume
・Activity#onConfigurationChanged
・透過ActivityならばonPause中にもライフサイ
クルが発生する
ライフサイクルタイミング
つまりはアプリがPause/Resume/終了等
かなり頻繁に呼び出される
TextureViewのライフサイクル
・onSurfaceTextureAvailable
・onSurfaceTextureSizeChanged
・onSurfaceTextureDestroyed
ライフサイクルタイミング
・Activity#onCreate
・Activity#onConfigurationChanged
・Activity#onDestroy
ライフサイクルタイミング
onCreateでTextureViewが確保∼
onDestroyでTextureViewが廃棄されるまで、
ライフサイクルが発生しない
ライフサイクルタイミング
うはwwww便利wwwww
TextureViewとは何者なのか
大雑把に説明する
TextureViewの中身は、
OpenGL ESで言うところの
テクスチャレンダリング
(表現を変えると)内部的に
Bitmapを持っていて、
そこに描画を行わせている。
一度描画用メモリを確保したら、
Activityのライフサイクルに
かかわらず保持し続ける。
一方SurfaceViewは
実体がWindowであるため、
Windowの破棄・生成タイミング
でライフサイクルが発生する。
それによる利点
EGLSurfaceが
onPause/onResumeで死なない
以上の利点により、
OpenGL ESを使った
某プロジェクトで
TextureViewを導入
プロジェクト は
じゅんちょう に
すすんでいた
かのように見えた
3ヶ月後
絶望が俺のゴールだ
TextureViewの地獄①
この世の理はすなわち
描画速度だと思いませんか!?
TextureViewの地獄①
TextureViewは垂直同期をとらない
TextureViewの地獄①
SurfaceViewは自動的に垂直同期をとる。
たぶん、Windowだから。
TextureViewの地獄①
具体的には、eglSwapBuffersで
自動的に垂直同期がとられる。
TextureViewの地獄①
TextureViewは
テクスチャレンダリングを行うため、
垂直同期をとらない。
TextureViewの地獄①
具体的には、eglSwapBuffersが
垂直同期を待たずに終了する。
TextureViewの地獄①
実際にやってみた
TextureViewの地獄②
TextureViewは速い(確信)
TextureViewの地獄②
glFinishしかしとらん
TextureViewの地獄②
TextureViewは内部で
Bitmap(SurfaceTexture)を持つ
じゃあ、それが解放される
onSurfaceTextureDestroyed
はいつ呼ばれるのか?
TextureViewの地獄②
onPauseじゃ呼ばれない。
onDestroyまで呼ばれない。
!
つまりはライフサイクルがシンプルに出来る。
TextureViewの地獄②
TextureViewの地獄②
onPause中のActivityはリソースを程よく殺す。
つまり、TextureViewも程よく殺す。
TextureViewの地獄②
TextureViewの地獄②
他のアプリでメモリが足りないなら、
TextureViewが死ぬしかないじゃない!!
いつ殺すの?
TextureViewの地獄②
知らんがな(́・ω・`)
TextureViewの地獄②
つまり検証が難しい。
TextureViewの地獄②
TextureViewはメモリを大量に消費する
TextureViewの地獄③
onResume後のActivityは
メモリが優先的に保持される
TextureViewの地獄③
つまり、
他のアプリやServiceを殺してでも
生き残る!
TextureViewの地獄③
史上最大の絶望
TextureViewの地獄④
TextureViewの地獄④
漏れてるの。
アレが。
何がって
TextureViewの地獄④
メモリ♥
TextureViewの地獄④
TextureViewの地獄④
メモリリークを引き起こす最小コード
TextureViewの地獄④
TextureViewの地獄④
TextureViewの地獄④
TextureViewの地獄④
解決方法
TextureViewを捨て、
SurfaceViewへ切り替えた
TextureViewの地獄④
TextureViewの地獄④
そしたら直った
TextureViewの地獄④
実際の所、
これはOS/GPUドライバ側の実装、
もしくは俺氏のコードの問題である
可能性が微レ存
TextureViewの地獄④
まとめ
G⃝⃝gleが説明した要件
すごい
俺氏の理解
最強に見える(迫真)
実装された運用
いや、確かに強いが、
運用に問題がありすぎね?
俺氏が本当に必要だったもの
SurfaceView
is
安
TextureView
is
[検閲により削除]
ドキュメントなんて単なる目安だ!
あとは勇気(デスマ)で補えばいい!!
質問があれば

More Related Content

What's hot

【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術Unity Technologies Japan K.K.
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたTakahiro Miyaura
 
Unityのサウンド状況を調べまくって分かったアレコレ
Unityのサウンド状況を調べまくって分かったアレコレUnityのサウンド状況を調べまくって分かったアレコレ
Unityのサウンド状況を調べまくって分かったアレコレTakaaki Ichijo
 
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウYasuyuki Niwa
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】Unity Technologies Japan K.K.
 
UE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないことUE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないことSatoshi Kodaira
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説するTaishiYamada1
 
Mixed Reality Toolkit V3について
Mixed Reality Toolkit V3についてMixed Reality Toolkit V3について
Mixed Reality Toolkit V3についてTakahiro Miyaura
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析Yuki Mizuno
 
良くわかるMeta
良くわかるMeta良くわかるMeta
良くわかるMetadaichi horio
 

What's hot (20)

【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 
Unityのサウンド状況を調べまくって分かったアレコレ
Unityのサウンド状況を調べまくって分かったアレコレUnityのサウンド状況を調べまくって分かったアレコレ
Unityのサウンド状況を調べまくって分かったアレコレ
 
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMERMetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
 
MRTK3を調べてみた
MRTK3を調べてみたMRTK3を調べてみた
MRTK3を調べてみた
 
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらいCEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめUnreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
 
20110118 scrum 10 mins
20110118 scrum 10 mins20110118 scrum 10 mins
20110118 scrum 10 mins
 
Lightmass Deep Dive 2018 Vol. 2: Lightmap作成のためのLightmass設定方法
Lightmass Deep Dive 2018 Vol. 2: Lightmap作成のためのLightmass設定方法Lightmass Deep Dive 2018 Vol. 2: Lightmap作成のためのLightmass設定方法
Lightmass Deep Dive 2018 Vol. 2: Lightmap作成のためのLightmass設定方法
 
UE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないことUE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないこと
 
かわいい女の子になりたいんや! UE4の最新機能を使ってVTuberしてみた!
かわいい女の子になりたいんや! UE4の最新機能を使ってVTuberしてみた!かわいい女の子になりたいんや! UE4の最新機能を使ってVTuberしてみた!
かわいい女の子になりたいんや! UE4の最新機能を使ってVTuberしてみた!
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
GPU最適化入門
GPU最適化入門GPU最適化入門
GPU最適化入門
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
Mixed Reality Toolkit V3について
Mixed Reality Toolkit V3についてMixed Reality Toolkit V3について
Mixed Reality Toolkit V3について
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
良くわかるMeta
良くわかるMeta良くわかるMeta
良くわかるMeta
 

Similar to あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていた

VRをはじめよう!
VRをはじめよう!VRをはじめよう!
VRをはじめよう!Satoshi Noda
 
Weekend Androidのススメ
Weekend AndroidのススメWeekend Androidのススメ
Weekend AndroidのススメSuzuki Junko
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウKentarou Mukunasi
 
アグリノートを支える技術
アグリノートを支える技術アグリノートを支える技術
アグリノートを支える技術Yukiya Nakagawa
 
A-Frameコンポーネントを公開しよう
A-Frameコンポーネントを公開しようA-Frameコンポーネントを公開しよう
A-Frameコンポーネントを公開しようJun Ito
 
脱Unity!?UE4でVR開発のここが変わった
脱Unity!?UE4でVR開発のここが変わった脱Unity!?UE4でVR開発のここが変わった
脱Unity!?UE4でVR開発のここが変わったCOLOPL, Inc.
 
Google vrからはじめるdaydreamへの道
Google vrからはじめるdaydreamへの道Google vrからはじめるdaydreamへの道
Google vrからはじめるdaydreamへの道shimada tatsuya
 

Similar to あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていた (8)

VRをはじめよう!
VRをはじめよう!VRをはじめよう!
VRをはじめよう!
 
Weekend Androidのススメ
Weekend AndroidのススメWeekend Androidのススメ
Weekend Androidのススメ
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 
アグリノートを支える技術
アグリノートを支える技術アグリノートを支える技術
アグリノートを支える技術
 
脱Unity!? UE4でVR開発のここが変わった
脱Unity!? UE4でVR開発のここが変わった脱Unity!? UE4でVR開発のここが変わった
脱Unity!? UE4でVR開発のここが変わった
 
A-Frameコンポーネントを公開しよう
A-Frameコンポーネントを公開しようA-Frameコンポーネントを公開しよう
A-Frameコンポーネントを公開しよう
 
脱Unity!?UE4でVR開発のここが変わった
脱Unity!?UE4でVR開発のここが変わった脱Unity!?UE4でVR開発のここが変わった
脱Unity!?UE4でVR開発のここが変わった
 
Google vrからはじめるdaydreamへの道
Google vrからはじめるdaydreamへの道Google vrからはじめるdaydreamへの道
Google vrからはじめるdaydreamへの道
 

Recently uploaded

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Recently uploaded (9)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていた