/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . android . tools . profil ers . memory Ċ Ċ import Ġcom . android . tools . adt ui . std ui . Context MenuItem Ċ import Ġcom . android . tools . profil ers . Ide Profiler Components Ċ import Ġcom . android . tools . profil ers . Ide Profiler Services Ċ import Ġcom . android . tools . profil ers . memory . adapters . Capture Object Ċ import Ġcom . android . tools . profil ers . memory . adapters . Capture Object . Classifier Attribute Ċ import Ġcom . android . tools . profil ers . memory . adapters . Capture Object . Instance Attribute Ċ import Ġcom . android . tools . profil ers . memory . adapters . Instance Object Ċ import Ġcom . android . tools . profil ers . memory . adapters . class ifiers . Class Set Ċ import Ġcom . android . tools . profil ers . memory . adapters . class ifiers . Classifier Set Ċ import Ġcom . google . common . annotations . Visible ForTesting Ċ import Ġjava . io . Buffered Writer Ċ import Ġjava . io . OutputStream Ċ import Ġjava . io . OutputStream Writer Ċ import Ġjava . util . stream . Stream Ċ import Ġjavax . swing . J Tree Ċ Ċ class ĠCsv Exporter ( private Ġval Ġget Tree : Ġ() Ġ-> ĠJ Tree ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġget Capture Object : Ġ() Ġ-> ĠCapture Object , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġide Profiler Components : ĠIde Profiler Components , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġide Services : ĠIde Profiler Services ) Ġ{ ĊĊĠ Ġfun Ġmake Class Export Item (): ĠContext MenuItem Ġ{ ĊĠĠĠ Ġfun Ġclass Stream ( c : ĠClass ifier Set ): ĠStream < Class Set > Ġ= Ġwhen Ġ( c ) Ġ{ ĊĠĠĠĠĠ Ġis ĠClass Set Ġ-> ĠStream . of ( c ) ĊĠĠĠĠĠ Ġelse Ġ-> Ġc . children Classifier Sets . stream (). flatMap (:: class Stream ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġmake Context MenuItem (" Export Ġclass Ġentries Ġunder Ġselection ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġget Capture Object (). classifier Attributes Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: class Stream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . LABEL Ġto ĠClass ifier Set :: getName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . ALLOC ATIONS Ġto ĠClass ifier Set :: get Delta Allocation Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . DE ALLOC ATIONS Ġto ĠClass ifier Set :: get Delta De allocation Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . TOTAL _ COUNT Ġto ĠClass ifier Set :: getTotal Object Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . NATIVE _ SIZE Ġto ĠClass ifier Set :: getTotal Native Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . SH ALLOW _ SIZE Ġto ĠClass ifier Set :: getTotal Sh allow Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . SH ALLOW _ DI FFER ENCE Ġto ĠClass ifier Set :: get Delta Sh allow Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . RE TAIN ED _ SIZE Ġto ĠClass ifier Set :: getTotal Ret ained Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . ALLOC ATIONS _ SIZE Ġto ĠClass ifier Set :: get Allocation Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . DE ALLOC ATIONS _ SIZE Ġto ĠClass ifier Set :: get De allocation Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ifier Attribute . RE MAIN ING _ SIZE Ġto ĠClass ifier Set :: getTotal Remaining Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠ Ġ} ĊĊĠ Ġfun Ġmake Instance Export Item () Ġ= ĊĠĠĠ Ġmake Context MenuItem (" Export Ġinstance Ġentries Ġunder Ġselection ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġget Capture Object (). instance Attributes Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . instances Stream Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Attribute . LABEL Ġto ĠInstance Object :: getValue Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Attribute . DEPTH Ġto ĠInstance Object :: get Depth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Attribute . ALLOC ATION _ TIME Ġto ĠInstance Object :: get Alloc Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Attribute . DE ALLOC ATION _ TIME Ġto ĠInstance Object :: get De alloc Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Attribute . NATIVE _ SIZE Ġto ĠInstance Object :: get Native Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Attribute . SH ALLOW _ SIZE Ġto ĠInstance Object :: get Sh allow Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Attribute . RE TAIN ED _ SIZE Ġto ĠInstance Object :: get Ret ained Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun < E , ĠA > Ġmake Context MenuItem ( title : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Attributes : Ġ() Ġ-> ĠList < A >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Entry Stream : Ġ( Classifier Set ) Ġ-> ĠStream < E >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat ters : ĠMap < A , Ġ( E ) Ġ-> ĠAny >) Ġ= Ġobject Ġ: ĠRunnable Context MenuItem Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetText () Ġ= Ġtitle ĊĠĠĠ Ġoverride Ġfun Ġget Icon () Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġis Enabled () Ġ= Ġget Tree ()?. let Ġ{ Ġ! it . is Selection Empty Ġ} Ġ?: Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ= Ġide Profiler Components . create Export Dialog (). open ( ĊĠĠĠĠĠ Ġ{ Ġ" Export ĠAs " Ġ}, ĊĠĠĠĠĠ ĠMemory Profiler :: generate Capture FileName , ĊĠĠĠĠĠ Ġ{ Ġ" csv " Ġ}, ĊĠĠĠĠĠ Ġ{ Ġide Services . save File ( it , Ġ:: export Entries , Ġnull ) Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġexport Entries ( output : ĠOutputStream ) Ġ{ ĊĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBuffered Writer ( OutputStream Writer ( output )) ĊĠĠĠĠĠ Ġget Tree ()?. selection Path ?. last Path Component ?. let Ġ{ Ġselection Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġ( init Attrs , Ġlast Attr ) Ġ= Ġwith ( getAttributes ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġassert ( isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠ ĠPair ( sub List ( 0 , Ġsize Ġ- Ġ 1 ), Ġlast ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġoutput Line ( on Attr : Ġ( A ) Ġ-> ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġinit Attrs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( on Attr ( it ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write (",") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġwriter . write ( on Attr ( last Attr ). toString ()) ĊĠĠĠĠĠĠĠĠĠ Ġwriter . new Line () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoutput Line Ġ{ it . toString ()} ĊĠĠĠĠĠĠĠ Ġget Entry Stream (( selection Ġas ĠMemory Object TreeNode < *> ). adapter Ġas ĠClass ifier Set ). forEach Ġ{ Ġinst Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġoutput Line Ġ{ Ġformat ters [ it ] !! ( inst ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġinterface ĠRunnable Context MenuItem Ġ: ĠContext MenuItem Ġ{ ĊĠĠĠ Ġfun Ġexport Entries ( out : ĠOutputStream ) ĊĠ Ġ} Ċ }