SlideShare a Scribd company logo
Chris Ripple | Program Manager
Performance & Profiling Tips
Session Overview
Profiling / Sampling
Method profiling
View Heap
Memory Allocations
Performance / Profiling Tools
Android SDK DDMS
Android Studio
History
Android
Best
Practices
Android
Java
Android
Layout
AsyncTask
About the App
Team Xuni
12 Developers in 6 Countries
Pittsburgh Shanghai
Sprint Planning App
2x sprints a day…
…in 30 mins…
…anywhere.
Slow scrolling
Slow animation
App crashes
GOALS: To plan… BUGS:
Performance & Profiling Tools
 First, identify the problem.
Profiling
 What is Profiling?
o Analyzing behavior in runtime
o CPU utilization
o Memory and I/O analysis
o Measurement of time and space
 Why do we need it?
o Avoid guesswork
o Quickly identify performance pitfalls
Android Profiling Tools
• Heap view
• Memory alloc
• Method profiling
• Logcat
• File explorer
• Examine threads
• Network traffic
• View hierarchy
• Emulate calls
• System info
• CPU
• GPU
• FPS
• Allocation Tracker
• Memory monitor
• Android Memory Viewer
• GPU monitor
• CPU monitor
• Network monitor
Android SDK
DDMS
Android Profiling Tools
• Method profiling
• Heap view
• Memory allocations
• Allocation Tracker
• Memory monitor
Android SDK
DDMS
DDMS Method profiling
 Sample-based profiling
o Interrupt VM at sampling frequency at collection call stacks
o Overhead proportional to frequency
 Trace-based profiling
o Trace entry and exit of every method
o High overhead
 Start Record, Perform Action, Stop Record
 Timeline vs Traceview panel views
DDMS – Memory tracking
 Total available heap space
 Total space allocated
 Total space free
 % Used
 Total # Objects
 Object allocation per size
 List of all allocations
 Allocation order
 Allocation size
 Class / Stacktrace
 Thread Id
 Allocated In
Heap View Allocation Tracker
Best Practices
Java Android Best Practices
 Recycling / Object Pooling Pattern ( Scrolling, Animation, Games)
 General Caching (Images / resources)
 Optimized Data Containers (SparseArray vs HashMap)
 Primitives (Integer vs Float 2x slower)
 Avoid enums
 Utilize static / final keywords (static 15%-20% faster)
 Avoid internal getters / setters (direct field access 3x faster)
Layout Best Practices
 RecyclerView (replaces ListView and GridView)
o setHasFixedSize
o Data updates (notifyDataSetChanged)
o Layout updates (notifyItemChanged / Inserted / Removed)
 <include> tag (easy code reuse of common layouts)
 <merge> tag (avoid extra ViewGroups on inflation)
 TextView Compound Drawables (add images to TextView)
AsyncTask: Why and What
Why use async?
 Avoid locking main UI Thread
o Lag
o App crash
What should be async?
 Network access
 Image loading
 Image resizing
 File access
AsyncTask: How
onPreExecute
doInBackground
onPostExecute
onProgressUpdate
UI Thread
UI Thread
UI Thread
Summary
Profiling / Sampling
Method profiling
View Heap
Memory Allocations
Performance / Profiling Tools
Android SDK DDMS
Android Studio
History
Android
Best
Practices
Android
Java
Android
Layout
AsyncTask
More Resources
Read Android SDK
developer.android.com
Follow Official Android Blog
android-developers.blogspot.com
Follow GrapeCity Xuni Blog
goxuni.com/blog
Questions?

More Related Content

Similar to Android Performance and Profiling Tips

Performance on a budget
Performance on a budgetPerformance on a budget
Performance on a budget
Dimitry Ushakov
 
Tool it Up! - Session #2 - NetPanel
Tool it Up! - Session #2 - NetPanelTool it Up! - Session #2 - NetPanel
Tool it Up! - Session #2 - NetPanel
toolitup
 
Analysis Services Best Practices From Large Deployments
Analysis Services   Best Practices From Large DeploymentsAnalysis Services   Best Practices From Large Deployments
Analysis Services Best Practices From Large Deployments
rsnarayanan
 
Gopher in performance_tales_ms_go_cracow
Gopher in performance_tales_ms_go_cracowGopher in performance_tales_ms_go_cracow
Gopher in performance_tales_ms_go_cracow
MateuszSzczyrzyca
 
"Avoiding memory leaks in Android" Денис Жучинский
"Avoiding memory leaks in Android" Денис Жучинский"Avoiding memory leaks in Android" Денис Жучинский
"Avoiding memory leaks in Android" Денис Жучинский
Fwdays
 
Forensic Memory Analysis of Android's Dalvik Virtual Machine
Forensic Memory Analysis of Android's Dalvik Virtual MachineForensic Memory Analysis of Android's Dalvik Virtual Machine
Forensic Memory Analysis of Android's Dalvik Virtual Machine
Source Conference
 
Android preformance
Android preformanceAndroid preformance
Android preformance
Udi Cohen
 
Meetup sthlm - introduction to Machine Learning with demo cases
Meetup sthlm - introduction to Machine Learning with demo casesMeetup sthlm - introduction to Machine Learning with demo cases
Meetup sthlm - introduction to Machine Learning with demo cases
Zenodia Charpy
 
Optimizing apps for better performance extended
Optimizing apps for better performance extended Optimizing apps for better performance extended
Optimizing apps for better performance extended
Elif Boncuk
 
How to do Memory Optimizations in Android
How to do Memory Optimizations in AndroidHow to do Memory Optimizations in Android
How to do Memory Optimizations in Android
Singsys Pte Ltd
 
Android101 - Intro and Basics
Android101 - Intro and BasicsAndroid101 - Intro and Basics
Android101 - Intro and Basics
jromero1214
 
Effective memory management
Effective memory managementEffective memory management
Effective memory management
Yurii Kotov
 
Effective memory management
Effective memory managementEffective memory management
Effective memory management
Denis Zhuchinski
 
Basic Hibernate Final
Basic Hibernate FinalBasic Hibernate Final
Basic Hibernate Final
Rafael Coutinho
 
Pref Presentation (2)
Pref Presentation (2)Pref Presentation (2)
Pref Presentation (2)
Prachi Patil
 
Android performance
Android performanceAndroid performance
Android performance
Eugene Dubovik
 
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...
javier ramirez
 
Analyzing .Net Application Memory Usage And Issues
Analyzing .Net Application Memory Usage And IssuesAnalyzing .Net Application Memory Usage And Issues
Analyzing .Net Application Memory Usage And Issues
Greg Sohl
 
Data to Go: Mobile API Design (SXSW)
Data to Go: Mobile API Design (SXSW)Data to Go: Mobile API Design (SXSW)
Data to Go: Mobile API Design (SXSW)
Chuck Greb
 
Optimisation and performance in Android
Optimisation and performance in AndroidOptimisation and performance in Android
Optimisation and performance in Android
Rakesh Jha
 

Similar to Android Performance and Profiling Tips (20)

Performance on a budget
Performance on a budgetPerformance on a budget
Performance on a budget
 
Tool it Up! - Session #2 - NetPanel
Tool it Up! - Session #2 - NetPanelTool it Up! - Session #2 - NetPanel
Tool it Up! - Session #2 - NetPanel
 
Analysis Services Best Practices From Large Deployments
Analysis Services   Best Practices From Large DeploymentsAnalysis Services   Best Practices From Large Deployments
Analysis Services Best Practices From Large Deployments
 
Gopher in performance_tales_ms_go_cracow
Gopher in performance_tales_ms_go_cracowGopher in performance_tales_ms_go_cracow
Gopher in performance_tales_ms_go_cracow
 
"Avoiding memory leaks in Android" Денис Жучинский
"Avoiding memory leaks in Android" Денис Жучинский"Avoiding memory leaks in Android" Денис Жучинский
"Avoiding memory leaks in Android" Денис Жучинский
 
Forensic Memory Analysis of Android's Dalvik Virtual Machine
Forensic Memory Analysis of Android's Dalvik Virtual MachineForensic Memory Analysis of Android's Dalvik Virtual Machine
Forensic Memory Analysis of Android's Dalvik Virtual Machine
 
Android preformance
Android preformanceAndroid preformance
Android preformance
 
Meetup sthlm - introduction to Machine Learning with demo cases
Meetup sthlm - introduction to Machine Learning with demo casesMeetup sthlm - introduction to Machine Learning with demo cases
Meetup sthlm - introduction to Machine Learning with demo cases
 
Optimizing apps for better performance extended
Optimizing apps for better performance extended Optimizing apps for better performance extended
Optimizing apps for better performance extended
 
How to do Memory Optimizations in Android
How to do Memory Optimizations in AndroidHow to do Memory Optimizations in Android
How to do Memory Optimizations in Android
 
Android101 - Intro and Basics
Android101 - Intro and BasicsAndroid101 - Intro and Basics
Android101 - Intro and Basics
 
Effective memory management
Effective memory managementEffective memory management
Effective memory management
 
Effective memory management
Effective memory managementEffective memory management
Effective memory management
 
Basic Hibernate Final
Basic Hibernate FinalBasic Hibernate Final
Basic Hibernate Final
 
Pref Presentation (2)
Pref Presentation (2)Pref Presentation (2)
Pref Presentation (2)
 
Android performance
Android performanceAndroid performance
Android performance
 
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...
 
Analyzing .Net Application Memory Usage And Issues
Analyzing .Net Application Memory Usage And IssuesAnalyzing .Net Application Memory Usage And Issues
Analyzing .Net Application Memory Usage And Issues
 
Data to Go: Mobile API Design (SXSW)
Data to Go: Mobile API Design (SXSW)Data to Go: Mobile API Design (SXSW)
Data to Go: Mobile API Design (SXSW)
 
Optimisation and performance in Android
Optimisation and performance in AndroidOptimisation and performance in Android
Optimisation and performance in Android
 

Recently uploaded

AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
Claudio Di Ciccio
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
FODUU
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 

Recently uploaded (20)

AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 

Android Performance and Profiling Tips

  • 1. Chris Ripple | Program Manager Performance & Profiling Tips
  • 2. Session Overview Profiling / Sampling Method profiling View Heap Memory Allocations Performance / Profiling Tools Android SDK DDMS Android Studio History Android Best Practices Android Java Android Layout AsyncTask
  • 4. Team Xuni 12 Developers in 6 Countries Pittsburgh Shanghai
  • 5. Sprint Planning App 2x sprints a day… …in 30 mins… …anywhere. Slow scrolling Slow animation App crashes GOALS: To plan… BUGS:
  • 6. Performance & Profiling Tools  First, identify the problem.
  • 7. Profiling  What is Profiling? o Analyzing behavior in runtime o CPU utilization o Memory and I/O analysis o Measurement of time and space  Why do we need it? o Avoid guesswork o Quickly identify performance pitfalls
  • 8. Android Profiling Tools • Heap view • Memory alloc • Method profiling • Logcat • File explorer • Examine threads • Network traffic • View hierarchy • Emulate calls • System info • CPU • GPU • FPS • Allocation Tracker • Memory monitor • Android Memory Viewer • GPU monitor • CPU monitor • Network monitor Android SDK DDMS
  • 9. Android Profiling Tools • Method profiling • Heap view • Memory allocations • Allocation Tracker • Memory monitor Android SDK DDMS
  • 10. DDMS Method profiling  Sample-based profiling o Interrupt VM at sampling frequency at collection call stacks o Overhead proportional to frequency  Trace-based profiling o Trace entry and exit of every method o High overhead  Start Record, Perform Action, Stop Record  Timeline vs Traceview panel views
  • 11. DDMS – Memory tracking  Total available heap space  Total space allocated  Total space free  % Used  Total # Objects  Object allocation per size  List of all allocations  Allocation order  Allocation size  Class / Stacktrace  Thread Id  Allocated In Heap View Allocation Tracker
  • 13. Java Android Best Practices  Recycling / Object Pooling Pattern ( Scrolling, Animation, Games)  General Caching (Images / resources)  Optimized Data Containers (SparseArray vs HashMap)  Primitives (Integer vs Float 2x slower)  Avoid enums  Utilize static / final keywords (static 15%-20% faster)  Avoid internal getters / setters (direct field access 3x faster)
  • 14. Layout Best Practices  RecyclerView (replaces ListView and GridView) o setHasFixedSize o Data updates (notifyDataSetChanged) o Layout updates (notifyItemChanged / Inserted / Removed)  <include> tag (easy code reuse of common layouts)  <merge> tag (avoid extra ViewGroups on inflation)  TextView Compound Drawables (add images to TextView)
  • 15. AsyncTask: Why and What Why use async?  Avoid locking main UI Thread o Lag o App crash What should be async?  Network access  Image loading  Image resizing  File access
  • 17. Summary Profiling / Sampling Method profiling View Heap Memory Allocations Performance / Profiling Tools Android SDK DDMS Android Studio History Android Best Practices Android Java Android Layout AsyncTask
  • 18. More Resources Read Android SDK developer.android.com Follow Official Android Blog android-developers.blogspot.com Follow GrapeCity Xuni Blog goxuni.com/blog

Editor's Notes

  1. CHRIS RIPPLE
  2. CHRIS RIPPLE
  3. CHRIS RIPPLE
  4. CHRIS RIPPLE
  5. VIVEK PUNJABI
  6. VIVEK PUNJABI
  7. VIVEK PUNJABI DDMS is part of the android SDK independent from IDEs DDMS Method profiling will still be your go to answer to find bottlenecks, but The real time CPU monitoring built into Android Studio lets you see the impact of real time user interaction
  8. VIVEK PUNJABI DDMS is part of the android SDK independent from IDEs DDMS Method profiling will still be your go to answer to find bottlenecks, but The real time CPU monitoring built into Android Studio lets you see the impact of real time user interaction
  9. CHRIS RIPPLE
  10. CHRIS RIPPLE
  11. CHRIS RIPPLE
  12. CHRIS RIPPLE
  13. CHRIS RIPPLE
  14. CHRIS RIPPLE
  15. CHRIS RIPPLE
  16. Vivek Punjabi