[Android] Optimize the DirectoryAdapter a bit by not precaching if there are more than 6 subitems
Edward Wang
git at videolan.org
Sat Jun 23 20:58:57 CEST 2012
android | branch: master | Edward Wang <edward.c.wang at compdigitec.com> | Sat Jun 23 14:58:39 2012 -0400| [a45c0972cd04a8d7f3f12ca55d72a3589989863d] | committer: Edward Wang
Optimize the DirectoryAdapter a bit by not precaching if there are more than 6 subitems
> http://git.videolan.org/gitweb.cgi/android.git/?a=commit;h=a45c0972cd04a8d7f3f12ca55d72a3589989863d
---
vlc-android/jni/libvlcjni.c | 33 ++++++++++++++++++++
vlc-android/src/org/videolan/vlc/LibVLC.java | 2 ++
.../src/org/videolan/vlc/gui/DirectoryAdapter.java | 10 +++---
3 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/vlc-android/jni/libvlcjni.c b/vlc-android/jni/libvlcjni.c
index 88177d6..3ccdce9 100644
--- a/vlc-android/jni/libvlcjni.c
+++ b/vlc-android/jni/libvlcjni.c
@@ -18,8 +18,11 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#include <dirent.h>
+#include <errno.h>
#include <string.h>
#include <pthread.h>
+#include <sys/types.h>
#include <vlc/vlc.h>
#include <vlc_common.h>
@@ -945,3 +948,33 @@ jint Java_org_videolan_vlc_LibVLC_setSpuTrack(JNIEnv *env, jobject thiz, jint in
return libvlc_video_set_spu(mp, index);
return -1;
}
+
+jint Java_org_videolan_vlc_LibVLC_nativeCountDirectoryContents(JNIEnv *env, jobject thiz, jstring path)
+{
+ jboolean isCopy;
+ /* Get C string */
+ const char* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);
+
+ jint childrenCount = 0;
+ DIR* p_dir = opendir(psz_path);
+ if(!p_dir)
+ return 0;
+
+ struct dirent* p_dirent;
+ while(1) {
+ errno = 0;
+ p_dirent = readdir(p_dir);
+ if(p_dirent == NULL) {
+ if(errno > 0) /* error reading this entry */
+ continue;
+ else if(errno == 0) /* end of stream */
+ break;
+ }
+ childrenCount++;
+ }
+ closedir(p_dir);
+
+ /* Clean up */
+ (*env)->ReleaseStringUTFChars(env, path, psz_path);
+ return childrenCount;
+}
diff --git a/vlc-android/src/org/videolan/vlc/LibVLC.java b/vlc-android/src/org/videolan/vlc/LibVLC.java
index bbbb5fc..47d1f46 100644
--- a/vlc-android/src/org/videolan/vlc/LibVLC.java
+++ b/vlc-android/src/org/videolan/vlc/LibVLC.java
@@ -408,6 +408,8 @@ public class LibVLC {
public native String nativeToURI(String path);
+ public native int nativeCountDirectoryContents(String path);
+
/**
* Return the length of the stream, in milliseconds
*/
diff --git a/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java b/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java
index dec54f8..38ae3be 100644
--- a/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java
+++ b/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java
@@ -151,10 +151,12 @@ public class DirectoryAdapter extends BaseAdapter {
if(files[i].isFile())
nss.setIsFile();
- /*String mCurrentDir_old = mCurrentDir;
- mCurrentDir = MRL;
- this.populateNode(nss, MRL + "/" + nss.name);
- mCurrentDir = mCurrentDir_old;*/
+ if(nss.isFile() && LibVLC.getExistingInstance().nativeCountDirectoryContents(MRL + "/" + nss.name) < 6) {
+ String mCurrentDir_old = mCurrentDir;
+ mCurrentDir = MRL;
+ this.populateNode(nss, MRL + "/" + nss.name);
+ mCurrentDir = mCurrentDir_old;
+ }
n.children.add(nss);
}
More information about the Android
mailing list