diff options
author | Jeff Sharkey <jsharkey@android.com> | 2013-02-21 19:09:55 -0800 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2013-02-21 19:11:41 -0800 |
commit | a76e33884c55bbd5db7e512b7687210cc3f635cf (patch) | |
tree | 8dd2f597d2a5779e9edba26fe660617ff92130f2 /jni/com_android_terminal_Terminal.cpp | |
parent | 479bd643981271fb0edf756ae5915e44a7352c4d (diff) | |
download | android_packages_apps_Terminal-a76e33884c55bbd5db7e512b7687210cc3f635cf.tar.gz android_packages_apps_Terminal-a76e33884c55bbd5db7e512b7687210cc3f635cf.tar.bz2 android_packages_apps_Terminal-a76e33884c55bbd5db7e512b7687210cc3f635cf.zip |
Start hooking up damage, shell script to test.
It's still pretty broken and I need to grok how damage and moveRect
play together. Avoid allocations inside onDraw().
Change-Id: I0fca467439178d902c4d11ff1523a0ec25c2dd39
Diffstat (limited to 'jni/com_android_terminal_Terminal.cpp')
-rw-r--r-- | jni/com_android_terminal_Terminal.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/jni/com_android_terminal_Terminal.cpp b/jni/com_android_terminal_Terminal.cpp index 7545a35..e195913 100644 --- a/jni/com_android_terminal_Terminal.cpp +++ b/jni/com_android_terminal_Terminal.cpp @@ -34,6 +34,8 @@ #include <string.h> +#define USE_TEST_SHELL true + namespace android { /* @@ -79,7 +81,9 @@ public: size_t write(const char *bytes, size_t len); + int flushDamage(); int resize(short unsigned int rows, short unsigned int cols); + int getCell(VTermPos pos, VTermScreenCell* cell); int getRows() const; @@ -245,7 +249,8 @@ Terminal::Terminal(jobject callbacks, int rows, int cols) : mVts = vterm_obtain_screen(mVt); vterm_screen_enable_altscreen(mVts, 1); vterm_screen_set_callbacks(mVts, &cb, this); - vterm_screen_set_damage_merge(mVts, VTERM_DAMAGE_SCROLL); + // TODO: switch back to VTERM_DAMAGE_SCROLL? + vterm_screen_set_damage_merge(mVts, VTERM_DAMAGE_CELL); vterm_screen_reset(mVts, 1); } @@ -304,7 +309,12 @@ int Terminal::run() { } char *shell = "/system/bin/sh"; //getenv("SHELL"); +#ifdef USE_TEST_SHELL + char *args[4] = {shell, "-c", "x=1; while true; do echo \"stop echoing yourself! ($x)\"; x=$(( $x + 1 )); sleep 0.5; done", NULL}; +#else char *args[2] = {shell, NULL}; +#endif + execvp(shell, args); fprintf(stderr_save, "Cannot exec(%s) - %s\n", shell, strerror(errno)); _exit(1); @@ -334,6 +344,11 @@ size_t Terminal::write(const char *bytes, size_t len) { return ::write(mMasterFd, bytes, len); } +int Terminal::flushDamage() { + vterm_screen_flush_damage(mVts); + return 0; +} + int Terminal::resize(short unsigned int rows, short unsigned int cols) { ALOGD("resize(%d, %d)", rows, cols); // TODO: wait for resize event to propegate back from shell? @@ -375,6 +390,11 @@ static jint com_android_terminal_Terminal_nativeRun(JNIEnv* env, jclass clazz, j return term->run(); } +static jint com_android_terminal_Terminal_nativeFlushDamage(JNIEnv* env, jclass clazz, jint ptr) { + Terminal* term = reinterpret_cast<Terminal*>(ptr); + return term->flushDamage(); +} + static jint com_android_terminal_Terminal_nativeResize(JNIEnv* env, jclass clazz, jint ptr, jint rows, jint cols) { Terminal* term = reinterpret_cast<Terminal*>(ptr); @@ -445,6 +465,7 @@ static jint com_android_terminal_Terminal_nativeGetCols(JNIEnv* env, jclass claz static JNINativeMethod gMethods[] = { { "nativeInit", "(Lcom/android/terminal/TerminalCallbacks;II)I", (void*)com_android_terminal_Terminal_nativeInit }, { "nativeRun", "(I)I", (void*)com_android_terminal_Terminal_nativeRun }, + { "nativeFlushDamage", "(I)I", (void*)com_android_terminal_Terminal_nativeFlushDamage }, { "nativeResize", "(III)I", (void*)com_android_terminal_Terminal_nativeResize }, { "nativeGetCellRun", "(IIILcom/android/terminal/Terminal$CellRun;)I", (void*)com_android_terminal_Terminal_nativeGetCellRun }, { "nativeGetRows", "(I)I", (void*)com_android_terminal_Terminal_nativeGetRows }, |