diff --git a/jni/Android.bp b/jni/Android.bp
index efc9160..c940cbb 100644
--- a/jni/Android.bp
+++ b/jni/Android.bp
@@ -35,6 +35,7 @@
     shared_libs: [
         "liblog",
         "libfuse",
+        "libandroid"
     ],
 
     static_libs: [
diff --git a/jni/FuseDaemon.cpp b/jni/FuseDaemon.cpp
index 7dcf311..4608d66 100644
--- a/jni/FuseDaemon.cpp
+++ b/jni/FuseDaemon.cpp
@@ -12,12 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#define ATRACE_TAG ATRACE_TAG_APP
 #define LOG_TAG "FuseDaemon"
 
 #include "FuseDaemon.h"
 
 #include <android-base/logging.h>
 #include <android/log.h>
+#include <android/trace.h>
 #include <ctype.h>
 #include <dirent.h>
 #include <errno.h>
@@ -66,6 +68,20 @@
 #define TRACE LOG(DEBUG)
 #define TRACE_FUSE(__fuse) TRACE << "[" << __fuse->path << "] "
 
+#define ATRACE_NAME(name) ScopedTrace ___tracer(name)
+#define ATRACE_CALL() ATRACE_NAME(__FUNCTION__)
+
+class ScopedTrace {
+  public:
+    inline ScopedTrace(const char *name) {
+      ATrace_beginSection(name);
+    }
+
+    inline ~ScopedTrace() {
+      ATrace_endSection();
+    }
+};
+
 #define FUSE_UNKNOWN_INO 0xffffffff
 
 constexpr size_t MAX_READ_SIZE = 128 * 1024;
@@ -516,6 +532,7 @@
 }
 
 static void pf_lookup(fuse_req_t req, fuse_ino_t parent, const char* name) {
+    ATRACE_CALL();
     struct fuse_entry_param e;
 
     if (do_lookup(req, parent, name, &e))
@@ -534,6 +551,7 @@
 }
 
 static void pf_forget(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup) {
+    ATRACE_CALL();
     struct node* node;
     struct fuse* fuse = get_fuse(req);
 
@@ -546,6 +564,7 @@
 static void pf_forget_multi(fuse_req_t req,
                             size_t count,
                             struct fuse_forget_data* forgets) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
 
     pthread_mutex_lock(&fuse->lock);
@@ -560,6 +579,7 @@
 static void pf_getattr(fuse_req_t req,
                        fuse_ino_t ino,
                        struct fuse_file_info* fi) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
     struct node* node;
@@ -587,6 +607,7 @@
                        struct stat* attr,
                        int to_set,
                        struct fuse_file_info* fi) {
+    ATRACE_CALL();
     struct node* node;
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
@@ -661,6 +682,7 @@
                      const char* name,
                      mode_t mode,
                      dev_t rdev) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
     struct node* parent_node;
@@ -696,6 +718,7 @@
                      fuse_ino_t parent,
                      const char* name,
                      mode_t mode) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
     struct node* parent_node;
@@ -726,6 +749,7 @@
 }
 
 static void pf_unlink(fuse_req_t req, fuse_ino_t parent, const char* name) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
     struct node* parent_node;
@@ -757,6 +781,7 @@
 }
 
 static void pf_rmdir(fuse_req_t req, fuse_ino_t parent, const char* name) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
     struct node* child_node;
@@ -799,6 +824,7 @@
                       fuse_ino_t newparent,
                       const char* newname,
                       unsigned int flags) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
     struct node* old_parent_node;
@@ -863,6 +889,7 @@
 */
 
 static void pf_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info* fi) {
+    ATRACE_CALL();
     struct node* node;
     string path;
     struct fuse* fuse = get_fuse(req);
@@ -1009,6 +1036,7 @@
 
 static void pf_read(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
                     struct fuse_file_info* fi) {
+    ATRACE_CALL();
     handle* h = reinterpret_cast<handle*>(fi->fh);
     struct fuse* fuse = get_fuse(req);
     TRACE_FUSE(fuse) << "READ";
@@ -1044,6 +1072,7 @@
                          struct fuse_bufvec* bufv,
                          off_t off,
                          struct fuse_file_info* fi) {
+    ATRACE_CALL();
     handle* h = reinterpret_cast<handle*>(fi->fh);
     struct fuse_bufvec buf = FUSE_BUFVEC_INIT(fuse_buf_size(bufv));
     ssize_t size;
@@ -1095,6 +1124,7 @@
 static void pf_flush(fuse_req_t req,
                      fuse_ino_t ino,
                      struct fuse_file_info* fi) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     TRACE_FUSE(fuse) << "FLUSH is a noop";
     fuse_reply_err(req, 0);
@@ -1103,6 +1133,7 @@
 static void pf_release(fuse_req_t req,
                        fuse_ino_t ino,
                        struct fuse_file_info* fi) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     handle* h = reinterpret_cast<handle*>(fi->fh);
 
@@ -1129,6 +1160,7 @@
                      fuse_ino_t ino,
                      int datasync,
                      struct fuse_file_info* fi) {
+    ATRACE_CALL();
     handle* h = reinterpret_cast<handle*>(fi->fh);
     int err = do_sync_common(h->fd, datasync);
 
@@ -1148,6 +1180,7 @@
 static void pf_opendir(fuse_req_t req,
                        fuse_ino_t ino,
                        struct fuse_file_info* fi) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
     struct node* node;
@@ -1262,6 +1295,7 @@
 
 static void pf_readdir(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
                        struct fuse_file_info* fi) {
+    ATRACE_CALL();
     do_readdir_common(req, ino, size, off, fi, false);
 }
 
@@ -1270,12 +1304,14 @@
                            size_t size,
                            off_t off,
                            struct fuse_file_info* fi) {
+    ATRACE_CALL();
     do_readdir_common(req, ino, size, off, fi, true);
 }
 
 static void pf_releasedir(fuse_req_t req,
                           fuse_ino_t ino,
                           struct fuse_file_info* fi) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     struct dirhandle* h = reinterpret_cast<struct dirhandle*>(fi->fh);
 
@@ -1286,6 +1322,7 @@
 }
 
 static void pf_statfs(fuse_req_t req, fuse_ino_t ino) {
+    ATRACE_CALL();
     struct statvfs st;
     struct fuse* fuse = get_fuse(req);
 
@@ -1318,6 +1355,7 @@
 }*/
 
 static void pf_access(fuse_req_t req, fuse_ino_t ino, int mask) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
 
@@ -1336,6 +1374,7 @@
                       const char* name,
                       mode_t mode,
                       struct fuse_file_info* fi) {
+    ATRACE_CALL();
     struct fuse* fuse = get_fuse(req);
     const struct fuse_ctx* ctx = fuse_req_ctx(req);
     struct node* parent_node;
diff --git a/jni/MediaProviderWrapper.cpp b/jni/MediaProviderWrapper.cpp
index 6a15b20..5f42b50 100644
--- a/jni/MediaProviderWrapper.cpp
+++ b/jni/MediaProviderWrapper.cpp
@@ -258,7 +258,6 @@
     request_terminate_jni_thread_ = false;
 
     jni_thread_ = std::thread(&MediaProviderWrapper::JniThreadLoop, this, jvm);
-    pthread_setname_np(jni_thread_.native_handle(), "media_provider_jni_thr");
     LOG(INFO) << "Successfully initialized MediaProviderWrapper";
 }
 
@@ -470,6 +469,7 @@
 void MediaProviderWrapper::JniThreadLoop(JavaVM* jvm) {
     JNIEnv* env;
     jvm->AttachCurrentThread(&env, NULL);
+    pthread_setname_np(pthread_self(), "jni_loop");
 
     while (!request_terminate_jni_thread_) {
         std::unique_lock<std::mutex> cond_lock(jni_task_lock_);
