Kamis, 30 Juli 2015

Iterate faster on Google Play with improved beta testing

Posted by Ellie Powers, Product Manager, Google Play



Today, Google Play is making it easier for you to manage beta tests and get your users to join them. Since we launched beta testing two years ago, developers have told us that it’s become a critical part of their workflow in testing ideas, gathering rapid feedback, and improving their apps. In fact, we’ve found that 80 percent of developers with popular apps routinely run beta tests as part of their workflow.



Improvements to managing a beta test in the Developer Console



Currently, the Google Play Developer Console lets developers release early versions of their app to selected users as an alpha or beta test before pushing updates to full production. The select user group downloads the app on Google Play as normal, but can’t review or rate it on the store. This gives you time to address bugs and other issues without negatively impacting your app listing.



Based on your feedback, we’re launching new features to more effectively manage your beta tests, and enable users to join with one click.




  • NEW! Open beta – Use an open beta when you want any user who has the link to be able to join your beta with just one click. One of the advantages of an open beta is that it allows you to scale to a large number of testers. However, you can also limit the maximum number of users who can join.


  • NEW! Closed beta using email addresses – If you want to restrict which users can access your beta, you have a new option: you can now set up a closed beta using lists of individual email addresses which you can add individually or upload as a .csv file. These users will be able to join your beta via a one-click opt-in link.


  • Closed beta with Google+ community or Google Group – This is the option that you’ve been using today, and you can continue to use betas with Google+ communities or Google Groups. You will also be able to move to an open beta while maintaining your existing testers.


How developers are finding success with beta testing



Beta testing is one of the fast iteration features of Google Play and Android that help drive success for developers like Wooga, the creators of hit games Diamond Dash, Jelly Splash, and Agent Alice. Find out more about how Wooga iterates on Android first from Sebastian Kriese, Head of Partnerships, and Pal Tamas Feher, Head of Engineering.






Kabam is a global leader in AAA quality mobile games developed in partnership with Hollywood studios for such franchises such as Fast & Furious, Marvel, Star Wars and The Hobbit. Beta testing helps Kabam engineers perfect the gameplay for Android devices before launch. “The ability to receive pointed feedback and rapidly reiterate via alpha/beta testing on Google Play has been extremely beneficial to our worldwide launches,” said Kabam VP Rob Oshima.



Matt Small, Co-Founder of Vector Unit recently told us how they’ve been using beta testing extensively to improve Beach Buggy Racing and uncover issues they may not have found otherwise. You can read Matt’s blog post about beta testing on Google Play on Gamasutra to hear about their experience. We’ve picked a few of Matt’s tips and shared them below:



  1. Limit more sensitive builds to a closed beta where you invite individual testers via email addresses. Once glaring problems are ironed out, publish your app to an open beta to gather feedback from a wider audience before going to production.

  2. Set expectations early. Let users know about the risks of beta testing (e.g. the software may not be stable) and tell them what you’re looking for in their feedback.

  3. Encourage critical feedback. Thank people when their criticisms are thoughtful and clearly explained and try to steer less-helpful feedback in a more productive direction.

  4. Respond quickly. The more people see actual responses from the game developer, the more encouraged they are to participate.

  5. Enable Google Play game services. To let testers access features like Achievements and Leaderboards before they are published, go into the Google Play game services testing panel and enable them.


We hope this update to beta testing makes it easier for you to test your app and gather valuable feedback and that these tips help you conduct successful tests. Visit the Developer Console Help Center to find out more about setting up beta testing for your app.





Rabu, 29 Juli 2015

Auto Backup for Apps made simple

Posted by Wojtek KaliciƄski, Developer Advocate, Android



Auto Backup for Apps makes seamless app data backup and restore possible with zero lines of application code. This feature will be available on Android devices running the upcoming M release. All you need to do to enable it for your app is update the targetSdkVersion to 23. You can test it now on the M Developer Preview, where we’ve enabled Auto Backup for all apps regardless of targetSdkVersion.



Auto Backup for Apps is provided by Google to both users and developers at no charge. Even better, the backup data stored in Google Drive does not count against the user's quota. Please note that data transferred may still incur charges from the user's cellular / internet provider.






What is Auto-Backup for Apps?



By default, for users that have opted in to backup, all of the data files of an app are automatically copied out to a user’s Drive. That includes databases, shared preferences and other content in the application’s private directory, up to a limit of 25 megabytes per app. Any data residing in the locations denoted by Context.getCacheDir(), Context.getCodeCacheDir() and Context.getNoBackupFilesDir() is excluded from backup. As for files on external storage, only those in Context.getExternalFilesDir() are backed up.



How to control what is backed up



You can customize what app data is available for backup by creating a backup configuration file in the res/xml folder and referencing it in your app’s manifest:





<application
android:fullBackupContent="@xml/mybackupscheme">



In the configuration file, specify <include/> or <exclude/> rules that you need to fine tune the behavior of the default backup agent. Please refer to a detailed explanation of the rules syntax available in the documentation.



What to exclude from backup


You may not want to have certain app data eligible for backup. For such data, please use one of the mechanisms above. For example:




  • You must exclude any device specific identifiers, either issued by a server or generated on the device. This includes the Google Cloud Messaging (GCM) registration token which, when restored to another device, can render your app on that device unable to receive GCM messages.


  • Consider excluding account credentials or other sensitive information information, e.g., by asking the user to reauthenticate the first time they launch a restored app rather than allowing for storage of such information in the backup.



With such a diverse landscape of apps, it’s important that developers consider how to maximise the benefits to the user of automatic backups. The goal is to reduce the friction of setting up a new device, which in most cases means transferring over user preferences and locally saved content.



For example, if you have the user’s account stored in shared preferences such that it can be restored on install, they won’t have to even think about which account they used to sign in with previously - they can submit their password and get going!



If you support a variety of log-ins (Google Sign-In and other providers, username/password), it’s simple to keep track of which log-in method was used previously so the user doesn’t have to.



Transitioning from key/value backups



If you have previously implemented the legacy, key/value backup by subclassing BackupAgent and setting it in your Manifest (android:backupAgent), you’re just one step away from transitioning to full-data backups. Simply add the android:fullBackupOnly="true" attribute on <application/>. This is ignored on pre-M versions of Android, meaning onBackup/onRestore will still be called, while on M+ devices it lets the system know you wish to use full-data backups while still providing your own BackupAgent.



You can use the same approach even if you’re not using key/value backups, but want to do any custom processing in onCreate(), onFullBackup() or be notified when a restore operation happens in onRestoreFinished(). Just remember to call super.onFullBackup() if you want to retain the system implementation of XML include/exclude rules handling.



What is the backup/restore lifecycle?



The data restore happens as part of the package installation, before the user has a chance to launch your app. Backup runs at most once a day, when your device is charging and connected to Wi-Fi. If your app exceeds the data limit (currently set at 25 MB), no more backups will take place and the last saved snapshot will be used for subsequent restores. Your app’s process is killed after a full backup happens and before a restore if you invoke it manually through the bmgr command (more about that below).



Test your apps now


Before you begin testing Auto Backup, make sure you have the latest M Developer Preview on your device or emulator. After you’ve installed your APK, use the adb shell command to access the bmgr tool.



Bmgr is a tool you can use to interact with the Backup Manager:



  • bmgr run schedules an immediate backup pass; you need to run this command once after installing your app on the device so that the Backup Manager has a chance to initialize properly

  • bmgr fullbackup <packagename> starts a full-data backup operation.

  • bmgr restore <packagename> restores previously backed up data


If you forget to invoke bmgr run, you might see errors in Logcat when trying the fullbackup and restore commands. If you are still having problems, make sure you have Backup enabled and a Google account set up in system Settings -> Backup & reset.



Learn more


You can find a sample application that shows how to use Auto Backup on our GitHub. The full documentation is available on developer.android.com



Join the Android M Developer Preview Community on Google+ for more information on Android M features and remember to report any bugs you find with Auto Backup in the bug tracker.




Selasa, 28 Juli 2015

[New eBook] Download The No-nonsense Guide to App Growth

Originally posted on the AdMob Blog.



What’s the secret to rapid growth for your app?



Play Store or App Store optimization? A sophisticated paid advertising strategy? A viral social media campaign?



While all of these strategies could help you grow your user base, the foundation for rapid growth is much more basic and fundamental—you need an engaging app.



This handbook will walk you through practical ways to increase your app’s user engagement to help you eventually transition to growth. You’ll learn how to:



  • Pick the right metric to represent user engagement

  • Look at data to audit your app and find areas to fix

  • Promote your app after you’ve reached a healthy level of user engagement


Download a free copy here.





For more tips on app monetization, be sure to stay connected on all things AdMob by following our Twitter and Google+ pages.



Posted by Raj Ajrawat, Product Specialist, AdMob




Rabu, 15 Juli 2015

Samsung galaxy grand 2 G7102 mic problem ways jumper solution

This is solution of samsung galaxy grand 2 G7102 mic problem.Now showing how to repair grand 2 G7102 mic problem and repair with two pin general mic.If you want to repair samsung grand 2 G7102 mic related problem then first check your phone one call if you see opposite person does not hear then it is confirm your
phone will mic damage.now showing how to repair it first check mic line ways if you found broken line then jumper following below picture if line ok but problem still then replace mic if you have no four pin mic then repair this two pin following by below picture.

   

samsung galaxy 4 tab t235 charging problem ways jumper solution

Now discus about samsung galaxy 4 tab t235 charging problem solution.This post help you repair samsung t235 charging problem this post also help  charging ways jumper.If want to repair this problem then repair
phone following below solution when you work in motherboard be careful.First check your phone with new or other running charger if see result same then repair hardware.


Selasa, 14 Juli 2015

Lighting the way with BLE beacons

Originally posted on the Google Developers blog.



Posted by Chandu Thota, Engineering Director and Matthew Kulick, Product Manager



Just like lighthouses have helped sailors navigate the world for thousands of years, electronic beacons can be used to provide precise location and contextual cues within apps to help you navigate the world. For instance, a beacon can label a bus stop so your phone knows to have your ticket ready, or a museum app can provide background on the exhibit you’re standing in front of. Today, we’re beginning to roll out a new set of features to help developers build apps using this technology. This includes a new open format for Bluetooth low energy (BLE) beacons to communicate with people’s devices, a way for you to add this meaningful data to your apps and to Google services, as well as a way to manage your fleet of beacons efficiently.





Eddystone: an open BLE beacon format


Working closely with partners in the BLE beacon industry, we’ve learned a lot about the needs and the limitations of existing beacon technology. So we set out to build a new class of beacons that addresses real-life use-cases, cross-platform support, and security.



At the core of what it means to be a BLE beacon is the frame format—i.e., a language—that a beacon sends out into the world. Today, we’re expanding the range of use cases for beacon technology by publishing a new and open format for BLE beacons that anyone can use: Eddystone. Eddystone is robust and extensible: It supports multiple frame types for different use cases, and it supports versioning to make introducing new functionality easier. It’s cross-platform, capable of supporting Android, iOS or any platform that supports BLE beacons. And it’s available on GitHub under the open-source Apache v2.0 license, for everyone to use and help improve.



By design, a beacon is meant to be discoverable by any nearby Bluetooth Smart device, via its identifier which is a public signal. At the same time, privacy and security are really important, so we built in a feature called Ephemeral Identifiers (EIDs) which change frequently, and allow only authorized clients to decode them. EIDs will enable you to securely do things like find your luggage once you get off the plane or find your lost keys. We’ll publish the technical specs of this design soon.






Eddystone for developers: Better context for your apps


Eddystone offers two key developer benefits: better semantic context and precise location. To support these, we’re launching two new APIs. The Nearby API for Android and iOS makes it easier for apps to find and communicate with nearby devices and beacons, such as a specific bus stop or a particular art exhibit in a museum, providing better context. And the Proximity Beacon API lets developers associate semantic location (i.e., a place associated with a lat/long) and related data with beacons, stored in the cloud. This API will also be used in existing location APIs, such as the next version of the Places API.



Eddystone for beacon manufacturers: Single hardware for multiple platforms


Eddystone’s extensible frame formats allow hardware manufacturers to support multiple mobile platforms and application scenarios with a single piece of hardware. An existing BLE beacon can be made Eddystone compliant with a simple firmware update. At the core, we built Eddystone as an open and extensible protocol that’s also interoperable, so we’ll also introduce an Eddystone certification process in the near future by closely working with hardware manufacturing partners. We already have a number of partners that have built Eddystone-compliant beacons.



Eddystone for businesses: Secure and manage your beacon fleet with ease


As businesses move from validating their beacon-assisted apps to deploying beacons at scale in places like stadiums and transit stations, hardware installation and maintenance can be challenging: which beacons are working, broken, missing or displaced? So starting today, beacons that implement Eddystone’s telemetry frame (Eddystone-TLM) in combination with the Proximity Beacon API’s diagnostic endpoint can help deployers monitor their beacons’ battery health and displacement—common logistical challenges with low-cost beacon hardware.



Eddystone for Google products: New, improved user experiences


We’re also starting to improve Google’s own products and services with beacons. Google Maps launched beacon-based transit notifications in Portland earlier this year, to help people get faster access to real-time transit schedules for specific stations. And soon, Google Now will also be able to use this contextual information to help prioritize the most relevant cards, like showing you menu items when you’re inside a restaurant.



We want to make beacons useful even when a mobile app is not available; to that end, the Physical Web project will be using Eddystone beacons that broadcast URLs to help people interact with their surroundings.



Beacons are an important way to deliver better experiences for users of your apps, whether you choose to use Eddystone with your own products and services or as part of a broader Google solution like the Places API or Nearby API. The ecosystem of app developers and beacon manufacturers is important in pushing these technologies forward and the best ideas won’t come from just one company, so we encourage you to get some Eddystone-supported beacons today from our partners and begin building!



Connect With the World Around You Through Nearby APIs

Originally posted on the Google Developers blog.



Posted by Akshay Kannan, Product Manager



Mobile phones have made it easy to communicate with anyone, whether they’re right next to you or on the other side of the world. The great irony, however, is that those interactions can often feel really awkward when you're sitting right next to someone.



Today, it takes several steps -- whether it’s exchanging contact information, scanning a QR code, or pairing via bluetooth -- to get a simple piece of information to someone right next to you. Ideally, you should be able to just turn to them and do so, the same way you do in the real world.



This is why we built Nearby. Nearby provides a proximity API, Nearby Messages, for iOS and Android devices to discover and communicate with each other, as well as with beacons.



Nearby uses a combination of Bluetooth, Wi-Fi, and inaudible sound (using the device’s speaker and microphone) to establish proximity. We’ve incorporated Nearby technology into several products, including Chromecast Guest Mode, Nearby Players in Google Play Games, and Google Tone.



With the latest release of Google Play services 7.8, the Nearby Messages API becomes available to all developers across iOS and Android devices (Gingerbread and higher). Nearby doesn’t use or require a Google Account. The first time an app calls Nearby, users get a permission dialog to grant that app access.



A few of our partners have built creative experiences to show what's possible with Nearby.



Edjing Pro uses Nearby to let DJs publish their tracklist to people around them. The audience can vote on tracks that they like, and their votes are updated in realtime.





Trello uses Nearby to simplify sharing. Share a Trello board to the people around you with a tap of a button.





Pocket Casts uses Nearby to let you find and compare podcasts with people around you. Open the Nearby tab in Pocket Casts to view a list of podcasts that people around you have, as well as podcasts that you have in common with others.





Trulia uses Nearby to simplify the house hunting process. Create a board and use Nearby to make it easy for the people around you to join it.





To learn more, visit developers.google.com/nearby?utm_campaign=nearby-api-714&utm_source=dac&utm_medium=blog.



Samsung SM-G130 display light problem ways jumper solution.

Now discussion about Samsung SM-G130 display light problems.This is samsung SM-G130e no light problems.This is new and update solution.If any one face this problem then fist check your phone
brightness level if level is 0 then put level high  then see result.If result same then it is hardware problem then open your phone and repair your phone following photo


Samsung s6 G925 sim problem ways jumper solution

Samsung S6 G925 insert sim problems Jumper.This will help you repair samsung g925 insert sim problem .You can repair any problem of insert sim in samsung G925 phone.Just first check sim base
pib then check sim base if they ok but problem same then follow below picture I hope your problems will solve.


Samsung GT-S5282 touch screen problems ways jumper solution

Today showing how to repair samsung GT-S 5282 touch not working solution.When any phone have this problem then first check touch connector if you see any carbon then wash connector with thiner
then check phone if problem same then replace touch panel.




Samsung GT-I8552 mmc problems ways jumper solution

This is Samsung GT-I8552 mmc not found problem solution and mmc ways jumper solution.first check your phone with good memory card.if problem still then check mmc slot of not solve then check line
ways following this picture if found any line brocken then jumper that line



Samsung g313h touch screen problem jumper ways solution

This is solution of samsung g313 touch screen problem.This is help you repair of samsung g313h touch related problem.first check touch ways then check touch connector if you found any abnormal
then repair that following below picture.

Sabtu, 11 Juli 2015

Nokia lumia 800 charging problem ways jumper solution

This is nokia Lumia 800 not charging problem solution.Nokia lumia 800 charging not responding solution.this problems repair step one check your phone new charging if condition same then charging
connector if it ok but problem still then repair your mother board following by below picture.



Nokia lumia 625 mic problem ways jumper solution

Now showing in this post how to repair nokia lumia 625 mic not work.this phone have four pin mic now showing how to repair nokia lumia 625 mic problem with two pin mic.If you have four pin mic then 
replace this mic. If you have no four pin mic then repair your phone with two pin mic following by below picture.

Kamis, 09 Juli 2015

M Developer Preview Gets Its First Update

By Jamal Eason, Product Manager, Android






Earlier this summer at Google I/O, we launched the M Developer Preview. The developer preview is an early access opportunity to test and optimize your apps for the next release of Android. Today we are releasing an update to the M Developer Preview that includes fixes and updates based on your feedback.



What’s New


The Developer Preview 2 update includes the up to date M release platform code, and near-final APIs for you to validate your app. To provide more testing support, we have refined the Nexus system images and emulator system images with the Android platform updates. In addition to platform updates, the system images also include Google Play services 7.6.



How to Get the Update


If you are already running the M developer preview launched at Google I/O (Build #MPZ44Q) on a supported Nexus device (e.g. Nexus 5, Nexus 6, Nexus 9, or Nexus Player), the update can be delivered to your device via an over-the-air update. We expect all devices currently on the developer preview to receive the update over the next few days. We also posted a new version of the preview system image on the developer preview website. (To view the preview website in a language other than English, select the appropriate language from the language selector at the bottom of the page).



For those developers using the emulator, you can update your M preview system images via the SDK Manager in Android Studio.



What are the Major Changes?


We have addressed many issues brought up during the first phase of the developer preview. Check out the release notes for a detailed list of changes in this update. Some of the highlights to the update include:




  • Android Platform Changes:

    • Modifications to platform permissions including external storage, Wi-Fi & Bluetooth location, and changes to contacts/identity permissions. Device connections through the USB port are now set to charge-only mode by default. To access the device, users must explicitly grant permission.



  • API Changes:

    • Updated Bluetooth Stylus APIs with updated callback events. View.onContextClickListener and GestureDetector.OnContextClickListener to listen for stylus button presses and to perform secondary actions.
    • Updated Media API with new callback InputDevice.hasMicrophone() method for determining if a device microphone exists.



  • Fixes for developer-reported issues:

    • TextInputLayout doesn't set hint for embedded EditText. (fixed issue)

    • Camera Permission issue with Legacy Apps (fixed issue)





Next Steps


With the final M release still on schedule for this fall, the platform features and API are near final. However, there is still time to report critical issues as you continue to test and validate your apps on the M Developer Preview. You can also visit our M Developer Preview community to share ideas and information.



Thanks again for your support. We look forward to seeing your apps that are ready to go for the M release this fall.





The App Developer Business Kit: Now available in 10 languages

Posted by Sean Meng, a Product Marketing Manager on the AdMob team





Today we’re excited to launch The App Developer Business Kit in 10 more languages. The website includes tips for new app developers on building, promoting and monetizing your app. Check out the Business Kit in your language:





To help you make decisions about growing your app business in other regions, we’ve added 6 new market reports providing great insights about app users in Italy, Spain, Germany, Brazil, France, and Russia. Did you know that Brazilian smartphone users engage with ads more frequently than users in the US and Japan? Or that while nearly 2/3rds of French users exclusively download free apps, only 31% of Brazilian smartphone users do? Check out statistics like these about exciting regions around the world here.



Stay connected on all things mobile apps by following us on Google+ and Twitter.


Kamis, 02 Juli 2015

Game Performance: Data-Oriented Programming

Posted by Shanee Nishry, Game Developer Advocate



To improve game performance, we’d like to highlight a programming paradigm that will help you maximize your CPU potential, make your game more efficient, and code smarter.



Before we get into detail of data-oriented programming, let’s explain the problems it solves and common pitfalls for programmers.



Memory


The first thing a programmer must understand is that memory is slow and the way you code affects how efficiently it is utilized. Inefficient memory layout and order of operations forces the CPU idle waiting for memory so it can proceed doing work.



The easiest way to demonstrate is by using an example. Take this simple code for instance:



char data[1000000]; // One Million bytes
unsigned int sum = 0;

for ( int i = 0; i < 1000000; ++i )
{
sum += data[ i ];
}


An array of one million bytes is declared and iterated on one byte at a time. Now let's change things a little to illustrate the underlying hardware. Changes marked in bold:



char data[16000000]; // Sixteen Million bytes
unsigned int sum = 0;

for ( int i = 0; i < 16000000; i += 16 )
{
sum += data[ i ];
}


The array is changed to contain sixteen million bytes and we iterate over one million of them, skipping 16 at a time.



A quick look suggests there shouldn't be any effect on performance as the code is translated to the same number of instructions and runs the same number of times, however that is not the case. Here is the difference graph. Note that this is on a logarithmic scale--if the scale were linear, the performance difference would be too large to display on any reasonably-sized graph!




Graph in logarithmic scale


The simple change making the loop skip 16 bytes at a time makes the program run 5 times slower!



The average difference in performance is 5x and is consistent when iterating 1,000 bytes up to a million bytes, sometimes increasing up to 7x. This is a serious change in performance.



Note: The benchmark was run on multiple hardware configurations including a desktop with Intel 5930K 3.50GHz CPU, a Macbook Pro Retina laptop with 2.6 GHz Intel i7 CPU and Android Nexus 5 and Nexus 6 devices. The results were pretty consistent.



If you wish to replicate the test, you might have to ensure the memory is out of the cache before running the loop because some compilers will cache the array on declaration. Read below to understand more on how it works.



Explanation


What happens in the example is quite simply explained when you understand how the CPU accesses data. The CPU can’t access data in RAM; the data must be copied to the cache, a smaller but extremely fast memory line which resides near the CPU chip.



When the program starts, the CPU is set to run an instruction on part of the array but that data is still not in the cache, therefore causing a cache miss and forcing the CPU to wait for the data to be copied into the cache.



For simplicity sake, assume a cache size of 16 bytes for the L1 cache line, this means 16 bytes will be copied starting from the requested address for the instruction.



In the first code example, the program next tries to operate on the following byte, which is already copied into the cache following the initial cache miss, therefore continuing smoothly. This is also true for the next 14 bytes. After 16 bytes, since the first cache miss the loop, will encounter another cache miss and the CPU will again wait for data to operate on, copying the next 16 bytes into the cache.



In the second code sample, the loop skips 16 bytes at a time but hardware continues to operate the same. The cache copies the 16 subsequent bytes each time it encounters a cache miss which means the loop will trigger a cache miss with each iteration and cause the CPU to wait idle for data each time!



Note: Modern hardware implements cache prefetch algorithms to prevent incurring a cache miss per frame, but even with prefetching, more bandwidth is used and performance is lower in our example test.





In reality the cache lines tend to be larger than 16 bytes, the program would run much slower if it were to wait for data at every iteration. A Krait-400 found in the Nexus 5 has a L0 data cache of 4 KB with 64 Bytes per line.



If you are wondering why cache lines are so small, the main reason is that making fast memory is expensive.



Data-Oriented Design



The way to solve such performance issues is by designing your data to fit into the cache and have the program to operate on the entire data continuously.



This can be done by organizing your game objects inside Structures of Arrays (SoA) instead of Arrays of Structures (AoS) and pre-allocating enough memory to contain the expected data.



For example, a simple physics object in an AoS layout might look like this:



struct PhysicsObject
{
Vec3 mPosition;
Vec3 mVelocity;

float mMass;
float mDrag;
Vec3 mCenterOfMass;

Vec3 mRotation;
Vec3 mAngularVelocity;

float mAngularDrag;
};


This is a common way way to present an object in C++.



On the other hand, using SoA layout looks more like this:



class PhysicsSystem
{
private:
size_t mNumObjects;
std::vector< Vec3 > mPositions;
std::vector< Vec3 > mVelocities;
std::vector< float > mMasses;
std::vector< float > mDrags;

// ...
};


Let’s compare how a simple function to update object positions by their velocity would operate.



For the AoS layout, a function would look like this:



void UpdatePositions( PhysicsObject* objects, const size_t num_objects, const float delta_time )
{
for ( int i = 0; i < num_objects; ++i )
{
objects[i].mPosition += objects[i].mVelocity * delta_time;
}
}


The PhysicsObject is loaded into the cache but only the first 2 variables are used. Being 12 bytes each amounts to 24 bytes of the cache line being utilised per iteration and causing a cache miss with every object on a 64 bytes cache line of a Nexus 5.



Now let’s look at the SoA way. This is our iteration code:



void PhysicsSystem::SimulateObjects( const float delta_time )
{
for ( int i = 0; i < mNumObjects; ++i )
{
mPositions[ i ] += mVelocities[i] * delta_time;
}
}


With this code, we immediately cause 2 cache misses, but we are then able to run smoothly for about 5.3 iterations before causing the next 2 cache misses resulting in a significant performance increase!



The way data is sent to the hardware matters. Be aware of data-oriented design and look for places it will perform better than object-oriented code.



We have barely scratched the surface. There is still more to data-oriented programming than structuring your objects. For example, the cache is used for storing instructions and function memory so optimizing your functions and local variables affects cache misses and hits. We also did not mention the L2 cache and how data-oriented design makes your application easier to multithread.



Make sure to profile your code to find out where you might want to implement data-oriented design. You can use different profilers for different architecture, including the NVIDIA Tegra System Profiler, ARM Streamline Performance Analyzer, Intel and PowerVR PVRMonitor.



If you want to learn more on how to optimize for your cache, read on cache prefetching for various CPU architectures.